2013-06-18 68 views
2

我使用的是excel 2007,並創建了一個包含三個vlookup()語句的UDF。該函數應該返回所有三個vlookup語句的總和。在大多數情況下,只有兩個vlookup()語句會返回有效值,第三個語句會導致NA,因爲查找值不包含在查找範圍內。爲什麼不在excel中使用vlookup語句的isError()VBA

我試圖捕獲錯誤,並通過使用返回零:

  1. Application.WorksheetFunction.iferror(VLOOKUP(...),0)

  2. 使用如果條件iserror(vlookup())then ...

但我似乎無法得到任一方法的工作。如果我將vlookup註釋掉,我知道創建錯誤一切都按預期工作。

有誰知道爲什麼似乎ISERROR(0和ISERROR()不被工作或者是另一種方法,將工作

更新:

這裏有三個VLOOKUP函數:

product2 = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(productA, lookuprng, offset, False), 0) 

product3 = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(productB, lookuprng, offset, False), 0) 

product4 = Application.WorksheetFunction.IfError(Application.WorksheetFunction.VLookup(productC, lookuprng, offset, False), 0) 
+0

你能發佈您的代碼? – Jack

回答

5

您可以捕獲與錯誤如下:

Sub HandleVlookupErrors() 
    Dim result As Variant 

    result = Application.VLookup(productA, lookuprng, offset, False) 
    If IsError(result) Then result = 0 

End Sub 

有關完整說明,請參閱Error Handling Within Worksheet Functions

-2
Dim Res as Variant 
Res = Application.WorksheetFunction.VLookup(Vndr, Range("A:a"), 1, False) 'Where Vndr is some unknown 
If Res = Vndr then 
    do xyz 
Else 
    do 123 
endif 
+2

沒有解釋的代碼轉儲很少有用。請編輯您的答案以包含一些上下文。 – Chris

+0

特別是有一個以上的接受答案的問題... – guitarthrower

0

你可以考慮寫與錯誤處理線VLOOKUP函數:

Public Function v_lookup(lookup_value As String, table_array As Range, col_index_num As Integer, range_lookup As Boolean) As String 

Dim result As Variant 
result = Application.VLookup(lookup_value, table_array, col_index_num, range_lookup) 

If IsError(result) Then result = "" 
v_lookup = result 

End Function