2016-01-13 126 views
2

如果我使用VLOOKUP()工作表單元格和查找值不能被發現,VLOOKUP()將返回#N/A獲取#N/A在Excel VBA

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 

以上拋出一個錯誤

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

上面還拋出一個錯誤

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

第一個正常工作。 '錯誤2042'正好是'#N/A'。 https://msdn.microsoft.com/en-us/library/bb211091%28v=office.12%29.aspx –

+0

@AxelRichter ........感謝您的參考! –

回答

4

我想你需要明確檢查的錯誤:

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

BTW,原因你會得到錯誤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(...)公式代替)

+1

非常感謝! –