我正在尝试显示一个消息框*,指示vlookup公式何时与数组中的名称匹配,何时不匹配。
使用以下数据,我当前的代码工作正常:
Name Name
John John
它返回以下消息框:" Ok"
Sub check_name()
Dim name As String
name = Range("A2")
If Application.WorksheetFunction.VLookup(Range("A2"), Range("B1:B2"), 1, False) = name Then
MsgBox "Ok"
Else
MsgBox "Not Ok"
End If
End Sub
但是当没有匹配时代码不起作用 根据以下数据,我试图显示:" Not Ok"。
Name Name
John Wayne
我收到以下消息:
运行时错误' 1004'
应用程序定义或对象定义的错误
我认为If
语句在vlookup
未返回匹配项时不起作用,即公式返回#N/A
(不可用)。
我试图将变量name
定义为布尔值。使它等于用IsNA
包裹的vlookup公式,然后我尝试使用' name'在If语句中,但我得到了与上面相同的结果模式。 子>
我如何度过难关? TKS。
* 使用VBA寻找答案
答案 0 :(得分:1)
您可以通过简单地为所讨论的细胞声明Validation rules
来完成此操作。
您需要选择Validation
然后选择从列表中验证单元格(包含您需要的单元格的另一个范围)。
如果您绝对需要在VBA中执行此操作,则必须执行一些错误捕获。
基本上你需要添加代码:
Function ThisFunction()
On Error GoTo ErrorHandler
' Your normal code
' The next two lines are VERY IMPORTANT. If you don't Exit, you'll get weird logical errors on runtime
ThisFunction = '...
Exit Function
ErrorHandler:
' Code to return the results in case of Error
ThisFunction = '...
End Function
No Match
结果出现错误,WorksheetFunction.VLookup()
无法直接处理
此代码,具体将被修改为
Sub check_name()
On Error GoTo ErrorHandler
Dim name As String
name = Range("A2")
If Application.WorksheetFunction.VLookup(Range("A2"), Range("B1:B2"), 1, False) = name Then
MsgBox "Ok"
Else
MsgBox "Not Ok" ' Never invoked
End If
Exit Sub
ErrorHandler:
MsgBox "Not ok"
End Sub
这是完成此任务的一种非常低效的方法,但这是解决问题的方法最少,因此它将适合此子例程中的其余代码