VBA索引匹配功能

时间:2020-03-24 15:21:18

标签: excel vba indexing match

我是vba的新手,在vba中编写上述功能时完全迷失了。实际上,我想做的事情与通常的excel公式相同。

更新: 根据Scott的回答,我调整了代码。现在,我出现了类型不匹配错误。根据定义,Mname的类型是一个字符串。查找范围(B18:B38)中的值是(非唯一)整数。我应该告诉Excel将它们作为字符串吗?如果是,怎么办?

摘要: 我有一个范围(D18:D38),我想根据由字符串变量(Mname)和另一个范围(B18:B38)之间的匹配所确定的行号从中选择一个值。字符串Variable由文件夹中文件的名称确定。

我的问题是我收到错误消息:'无法获取工作表函数类的match属性'

感谢您的帮助!

Sub Test()
Application.ScreenUpdating = False
    Dim Mname As String
    Set WSCockpit = ThisWorkbook.ActiveSheet

    Dim strFileName As String
    Dim strFolder As String: strFolder = WSCockpit.Range("D9").Value
    Dim strFileSpec As String: strFileSpec = strFolder & "*.xls*"
    strFileName = Dir(strFileSpec)
    Do While Len(strFileName) > 0

    Dim strFilePath As String: strFilePath = strFolder & strFileName

    Mname = Mid(strFileName, 13, Len(strFileName) - 17)

    Dim rw As Long
    rw = Application.Match(Mname, WSCockpit.Range("B18:B38"), 0)

    Dim VarImp As Boolean
    VarImp = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"), rw)

'some other task'

Loop

Application.DisplayAlerts = True
End Sub

备份: 对不起,代码太乱了。我对编写vba的一般规则一无所知。如前所述,我的目标是使查询运行。查找的值将为“ TRUE”或“ FALSE”。之后,我将使用它来确定是否需要导入在文件夹中找到的文件。如果您对我的编码或想要执行的任务有其他建议,我将很高兴听到。

1 个答案:

答案 0 :(得分:0)

将其分为多个步骤,并确保您希望在查找中找到的数据确实存在。意思是,在运行时检查Mname的值(通过调试代码),并确认可以手动找到它。

最后,请改用Application.Match

Dim rw as Long
rw = Application.Match(Mname, WSCockpit.Range("B18:B38"),0)

Dim import as Boolean
import = Application.WorksheetFunction.Index(WSCockpit.Range("D18:D38"),rw)