在Excel VBA中获得#N / A

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

在这里输入图像说明

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

顺便说一句,你得到错误2029与您的Evaluate版本的原因是,它应该是:

 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(…)公式代替)