Excel VBA工作表功能是否需要使用select来显示在正确的工作表上
我有以下代码,但我必须选择工作表,否则WorksheetFunction将返回错误:Excel VBA工作表功能是否需要使用select来显示在正确的工作表上,excel,vba,Excel,Vba,我有以下代码,但我必须选择工作表,否则WorksheetFunction将返回错误: Function Find_Allocation_Acct_Row_Number(allocation_acct As String, allocation_cc As String) Dim WS As Worksheet Dim CC_row As Integer Dim search_rng As Range Set WS = Sheets(allocation_cc) WS.Select Set s
Function Find_Allocation_Acct_Row_Number(allocation_acct As String, allocation_cc As String)
Dim WS As Worksheet
Dim CC_row As Integer
Dim search_rng As Range
Set WS = Sheets(allocation_cc)
WS.Select
Set search_rng = WS.Range("E1:E2000")
CC_row = WS.Application.WorksheetFunction.Match(allocation_acct,search_rng, 0)
Find_Allocation_Acct_Row_Number = CC_row + 4
End Function
如何在不使用select命令的情况下在正确的工作表上选择正确的范围
说清楚一点,我总是能找到价值所在。我只需要返回该行,以便从中创建一个范围
我尝试了许多不同的方法将“搜索”更改为不同的变量或范围表达式,但没有成功
我得到的错误是:
Run-time error '1004':
Unable to get the Match property of the WorksheetFunction class
如果没有找到匹配项,它将抛出一个错误并停止代码。如果我们延迟绑定匹配并将结果发送到变体,我们可以测试错误:
Function Find_Allocation_Acct_Row_Number(allocation_acct As String, allocation_cc As String) As Long
Dim WS As Worksheet
Set WS = Worksheets(allocation_cc)
Dim search_rng As Range
Set search_rng = WS.Range("E1:E2000")
Dim CC_row As Variant
CC_row = Application.Match(allocation_acct, search_rng, 0)
If Not IsError(CC_row) Then
Find_Allocation_Acct_Row_Number = CC_row + 4
Else
Find_Allocation_Acct_Row_Number = -1
End If
End Function
现在,如果找不到匹配项,它将返回
-1
错误消息是什么?注意-最好向函数传递工作表对象,而不是表示名称的字符串。而且最好使用Long
而不是Integer
。并且要明确-只要将添加到函数声明的末尾,就可以添加。您不需要Match
上的WS
,Search\u rng
将工作表作为变量的一部分。您不应该需要WS。如果您遇到错误,请选择,这是因为当在搜索范围中找不到该值时,会产生一个停止代码的错误。如果您正在查找0001
,它可能很简单,因为查找是一个格式化为显示lead0
s的数字,而不是一个文本字符串。如果试图将格式化为0000
的文本字符串0001
与1
匹配,则将找不到匹配项。@Vaslo问题不在于代码,而在于数据或调用函数的方式。很抱歉,我在上面添加了错误,因为该值始终存在。这条线将完全不同。@Vaslo从不认为不会发生错误。因为——它会的,墨菲定律。好吧,我相信大量的谨慎,并且可以添加建议,但是如果当我知道我的价值在那里时它出错了,不幸的是它不能解决我的问题。