如果我在工作表单元格中使用 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 / ASub IsThisReallyNecessary()
With Range("Z100")
.Formula = "=VLookup(11,A1:B10, 2, False)"
MsgBox .Text
End With
End Sub
但这也使用了一个细胞。是否有一种简单的方法可以获得 #N / A ??
答案 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(...)公式)