2017-09-23 192 views
0

我有一个函数,它有一个vlookup。 如果查找值位于目标数组中,则vlookup将起作用。 如果查找值不在目标数组中,我需要它返回0. 当前,当我使用不在数组中的查找值运行函数时,函数只是错误并结束。没有消息。 这是我的代码。Excel VBA Application.iferror()不处理错误

Function myPrice(myPart As String, myVol As Integer) 

    Application.Volatile 

    Dim myCol As Integer 
    Dim myCavity As Integer 
    Dim myCycleTime As Integer 
    Dim wb As Workbook 
    Dim ws As Worksheet 
    Dim myVal As Double 

    Set wb = Workbooks("AdvancedQuote.xlsm") 
    Set ws = wb.Worksheets("Sheet1") 

    With ws 

    myVal = Application.IfError(Application.WorksheetFunction.VLookup("Four", .Range("TestTable"), 2, 0), 678) 

    myCol = Application.WorksheetFunction.Match(myPart, .Range("Item_Name"), 0) 
    myCavity = Application.WorksheetFunction.Index(.Range("Molding_Data"), Application.WorksheetFunction.Match("Cavities", .Range("pRows"), 0), myCol) 
    myCycleTime = Application.WorksheetFunction.Index(.Range("Molding_Data"), Application.WorksheetFunction.Match("Cycle Time", .Range("pRows"), 0), myCol) 

    End With 

    myPrice = myCavity * myCycleTime/myVol 

End Function 

失败的行是myVal =行。 是否需要设置'on error'来允许IfError处理错误?

或者,我该如何完成这项任务。 Rich

回答

3

WorksheetFunction属性导致程序在发生错误时中断。因此,使用Application对象而不是VLOOKUP方法...

myVal = Application.IfError(Application.VLookup("Four", .Range("TestTable"), 2, 0), 678) 
+0

这个伎俩。现在工作正常。 – rtemen

0

尝试下面捕获的代码,如果Application.VLookup错误不.Range("TestTable")找到"Four"

If IsError(Application.VLookup("Four", .Range("TestTable"), 2, 0)) Then ' Vlookup raised an error 
    myVal = 678 
Else ' Vlookup was successful 
    myVal = Application.VLookup("Four", .Range("TestTable"), 2, 0) 
End If 
+0

现在我发现iferror()没有处理div/0错误。捕捉这个错误有什么特别的吗? – rtemen

+0

检查[this](https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/on-error-statement)。 – UGP

+0

@UGP检查什么? '在错误恢复下一个'?我“听说过”;)除非必须,否则我宁愿用其他方式来捕捉错误。 –