首页 > 解决方案 > VBA 索引匹配函数

问题描述

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

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

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

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

谢谢你的帮助!

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”。之后我将使用它来确定文件夹中找到的文件是否需要导入。如果您对我的编码或我想要执行的任务有其他建议,我会很高兴听到。

标签: excelvbaindexingmatch

解决方案


将其分解为多个步骤,并确保您希望在查找中找到的数据确实存在。意思是,在运行时检查 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)

推荐阅读