为什么notError()不能在excel VBA中使用vlookup语句

时间:2013-06-18 19:53:39

标签: excel-vba excel-2007 vba excel

我正在使用excel 2007并创建了一个包含三个vlookup()语句的UDF。该函数应该返回所有三个vlookup语句的总和。在大多数情况下,只有两个vlookup()语句将返回一个有效值,第三个语句将导致NA,因为查找值不包含在查找范围内。

我试图捕获错误并使用以下命令返回零:

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

  2. 使用If iserror(vlookup())的条件然后......

  3. 但我似乎无法获得任何一种工作方法。如果我注释掉我知道正在创建错误的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)
    

3 个答案:

答案 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