当vlookup返回或不返回匹配时显示一个消息框

我试图显示一个消息框*指示一个虚拟查找公式匹配数组中的名称,当它不。

以下数据,我目前的代码工作正常:

Name Name John John 

它返回以下消息框:“确定”

 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 

但是,如果没有匹配,代码将不起作用。
以下数据,我试图显示:“不好”。

 Name Name John Wayne 

我收到以下消息:

运行时错误“1004”
应用程序定义或对象定义的错误

我猜If语句不起作用,当vlookup不返回匹配,即,如果公式返回#N/A (不可用)。

我试图将variablesname定义为布尔值。 使它与用IsNA包装的IsNA公式IsNA ,然后我尝试在If语句中使用'name',但是我得到了与上面相同的结果模式。

我怎么能通过这个? 韩国社交协会。

* 使用VBA寻找答案

您可以通过简单地声明有问题的单元格的Validation rules来做到这一点。

您需要selectValidation ,然后selectvalidation列表中的单元格(另一个包含所需单元格的范围)。

如果你绝对需要在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 

这是完成这个任务的非常低效的方法,但是这是对这个问题最less修改的方法,所以它将适合在这个子例程中的其他代码