捕获Vlookup 1004错误

时间:2012-11-09 12:24:57

标签: excel vba

我正在尝试使用Vlookup在“数据库”(DB_SHEET)中查找一些税。当我的名字在我的DB中不存在时,我在VlookUp中得到错误'1004'。

为什么'On Error GoTo Err1'没有发现错误?

我的代码:

Dim tax1 as Double, tax2 as Double, name as String

On Error GoTo Err1
While Cells(rowIndex, 1) <> ""
    name = Cells(rowIndex, 4)
    fin = Cells(rowIndex, 5) * Cells(rowIndex, 6)
    tax1 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("D:G"), 3, False)
    tax2 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("K:P"), 2, False)

    Cells(rowIndex, 8) = (fin * tax1) - (fin * tax2)
Err1:
    rowIndex = rowIndex + 1
Wend
On Error Goto 0

我已经知道一个有效的代码,但我想了解为什么我不能使用“On Sheet”执行“WorksheetFunction”并捕获错误。

其他有效的版本:

Dim tax1 as Variant, tax2 as Variant, name as String

While Cells(rowIndex, 1) <> ""
    name = Cells(rowIndex, 4)
    fin = Cells(rowIndex, 5) * Cells(rowIndex, 6)
    tax1 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("D:G"), 3, False)
    tax2 = WorksheetFunction.VLookup(name, Sheets(DB_SHEET).Range("K:P"), 2, False)

    If Not IsError(tax1) And not IsError(tax2) Then
         Cells(rowIndex, 8) = (fin * tax1) - (fin * tax2)
    End if

    rowIndex = rowIndex + 1
Wend

修改(之后:K_B回答)

1)如果我使用Application.Flookup(...)插入了WorksheetFunction.Vlookup(...),我得到了“错误13”。

1 个答案:

答案 0 :(得分:2)

这是因为Excel错误和VB错误之间的差异。你的VLookup会抛出一个Excel错误,但VB代码工作正常(该变体现在只包含错误代码)。如果您在VBA中执行1/0,则会出现VB错误,该错误将通过On Error GoTo ...

捕获

您已经通过检查表达式的值是否为IsError()函数的错误来捕获Excel错误,您已经找到了解决方案,所以我无法填写您的内容!

现在假设tax1tax2是十进制数,通常您可以更改这两个变量的Dim以反映这一点,并将它们标注为Single而不是Variant。现在,当您的VLookup失败时,您将收到VB错误,因为错误无法放入Single,而您可以使用On Error GoTo ...

捕获错误