当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修改的方法,所以它将适合在这个子例程中的其他代码