在Excel VBA中获取#N / A.

时间:2016-01-13 16:44:40

标签: excel excel-vba vlookup vba

如果我在工作表单元格中使用 VLOOKUP()并且无法找到查找值, VLOOKUP()将返回 #N / A

enter image description here

我想在 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 ??

1 个答案:

答案 0 :(得分:4)

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

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

BTW,您使用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(...)公式)