对象'WorksheetFunction'失败的VBA匹配函数“方法”匹配
我想在Excel中的编程项目中使用Match VBA函数来获取其中包含“1”的第一个行号。 我使用的代码是:
Dim BorradorVar As Integer BorradorVar = WorksheetFunction.Match(1, Sheets("Usuarios").Range("A1,A100"), 0)
有人可以解释我做错了什么? 谢谢!
您应该参考Range
为
Range("A1:A100")
代替
Range("A1,A100")
使用逗号只能引用A1
和A100
。
另外,如果不确定是否匹配,则可以使用Application.Match
并将结果存储在Variant
variables中。 不同之处在于Application.Match
在失败时返回一个错误,然后你可以检查它是否失败。
示例(查看完整代码的MSDN ):
Dim var As Variant var = Application.Match(Cells(iRow, 1).Value, Worksheets(iSheet).Columns(1), 0) If Not IsError(var) Then Debug.Print "There is actually a match" Else Debug.Print "No match found" End IF
警告一句话:如果你在第32,767
行之后匹配, 你的代码将不会运行 ,因为它超出了Integer
的范围。 我build议使用Long
而不是Integer
。 无论如何, 使用Long是VBA
最好的练习 。
最后,请注意,如果有人更改工作表的名称,则此代码将不会运行。 使用工作表ID而不是名字来引用工作表比较安全 (免责声明:我已经写了接受的对这个问题的回答)。