当vlookup返回或未返回匹配时显示消息框

时间:2014-07-06 00:40:45

标签: excel vba

我正在尝试显示一个消息框*,指示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寻找答案

1 个答案:

答案 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

这是完成此任务的一种非常低效的方法,但这是解决问题的方法最少,因此它将适合此子例程中的其余代码