如果我在工作表单元格中使用VLOOKUP()而找不到查找值,则VLOOKUP()将返回#N / A:

excel - 在Excel VBA中获得#N/A-LMLPHP

我想在VBA中做同样的事情而不将公式放在单元格中。到目前为止我尝试过的是:

Sub FailedLookup()
   Dim v As Variant
   v = Application.VLookup(11, Range("A1:B10"), 2, False)
   MsgBox CStr(v)
End Sub


以上返回“错误2042”

Sub FailedLookup2()
   Dim v As Variant
   v = WorksheetFunction.VLookup(11, Range("A1:B10"), 2, False)
   MsgBox CStr(v)
End Sub


上面引发了1004错误

Sub FailedLookup3()
   Dim v As Variant
   v = Application.WorksheetFunction.VLookup(11, Range("A1:B10"), 2, False)
   MsgBox CStr(v)
End Sub


上面也抛出了1004错误

Sub FailedLookup4()
   Dim v As Variant
   v = Evaluate("VLookup(11, Range(""A1:B10""), 2, False)")
   MsgBox CStr(v)
End Sub


上面返回“错误2029”。

我可以通过以下方式获得#N / A:

Sub IsThisReallyNecessary()
   With Range("Z100")
      .Formula = "=VLookup(11,A1:B10, 2, False)"
      MsgBox .Text
   End With
End Sub


但这也使用一个单元。有没有一种简单的方法来获取#N / A?

最佳答案

我认为您需要明确检查该错误:

   If v = CVErr(xlErrNA) Then MsgBox "#N/A"


顺便说一句,您的Evaluate版本出现错误2029的原因是:

v = Evaluate("VLookup(11, A1:B10, 2, False)")


您还可以调整传递给Evaluate的公式:

   Dim v As Variant
   v = Evaluate("IFERROR(VLookup(11, A1:B10, 2, False),""#N/A"")")
   MsgBox v


(如果第二栏中可能有错误值,请改用IF(ISNA(...)公式)

关于excel - 在Excel VBA中获得#N/A,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34772294/

10-10 04:10