我正在尝试使用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”。
答案 0 :(得分:2)
这是因为Excel错误和VB错误之间的差异。你的VLookup会抛出一个Excel错误,但VB代码工作正常(该变体现在只包含错误代码)。如果您在VBA中执行1/0,则会出现VB错误,该错误将通过On Error GoTo ...
您已经通过检查表达式的值是否为IsError()
函数的错误来捕获Excel错误,您已经找到了解决方案,所以我无法填写您的内容!
现在假设tax1
和tax2
是十进制数,通常您可以更改这两个变量的Dim
以反映这一点,并将它们标注为Single
而不是Variant
。现在,当您的VLookup失败时,您将收到VB错误,因为错误无法放入Single
,而您可以使用On Error GoTo ...