对象'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") 

使用逗号只能引用A1A100

另外,如果不确定是否匹配,则可以使用Application.Match并将结果存储在Variantvariables中。 不同之处在于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而不是名字来引用工作表比较安全 (免责声明:我已经写了接受的对这个问题的回答)。