我正在使用excel 2007并创建了一个包含三个vlookup()语句的UDF。该函数应该返回所有三个vlookup语句的总和。在大多数情况下,只有两个vlookup()语句将返回一个有效值,第三个语句将导致NA,因为查找值不包含在查找范围内。
我试图捕获错误并使用以下命令返回零:
Application.WorksheetFunction.iferror(vlookup(...),0)
使用If iserror(vlookup())的条件然后......
但我似乎无法获得任何一种工作方法。如果我注释掉我知道正在创建错误的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 :(得分:6)
您可以使用以下内容捕获错误:
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。
答案 1 :(得分: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
答案 2 :(得分:-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