而不是WorksheetFunction.Vlookup
,您可以使用Application.Vlookup
. 如果将 a 设置为Variant
等于此值,则如果未找到匹配项,则会返回错误 2042。然后,您可以测试变体 -cellNum
在这种情况下 - 使用IsError
:
Sub test()
Dim ws As Worksheet: Set ws = Sheets("2012")
Dim rngLook As Range: Set rngLook = ws.Range("A:M")
Dim currName As String
Dim cellNum As Variant
'within a loop
currName = "Example"
cellNum = Application.VLookup(currName, rngLook, 13, False)
If IsError(cellNum) Then
MsgBox "no match"
Else
MsgBox cellNum
End If
End Sub
和函数的Application
版本允许您在不引发错误的情况下测试错误。如果您使用该版本,则需要复杂的错误处理,将您的代码重新路由到错误处理程序,返回到下一个语句进行评估等。使用这些函数,您可以避免这种混乱。VLOOKUP
MATCH
WorksheetFunction
Application
IIF
使用该功能可以进一步简化上述内容。If/Then
此方法并不总是合适的(例如,如果您必须基于
cellNum = Application.VLookup(currName, rngLook, 13, False)
MsgBox IIF(IsError(cellNum),"no match", cellNum)
考虑那些方法而不是 On Error ...
语句。它们都更易于阅读和维护——没有什么比尝试遵循一堆GoTo
andResume
语句更令人困惑的了。