Excel VBA VLookup运行时错误'1004'

时间:2018-04-26 13:19:21

标签: excel vba excel-vba runtime-error vlookup

我想巩固两张纸。在Tabelle 3中已有一些数据。因此,我定义了Next Free Row (NFR),并希望将Tabelle 5中的数据添加到Tabelle 3中的下一个空闲行。因此,我编写了以下VLookup函数。

Sub ConsolidateData()

Dim lastrow As Long
Dim NFR As Long

lastrow = Tabelle5.Range("A" & Rows.Count).End(xlUp).Row
NFR = Tabelle3.Range("A" & Rows.Count).End(xlUp).Offset(-3).Row

Set myrange = Tabelle5.UsedRange


    For i = 4 To lastrow


        Tabelle3.Cells(NFR + i, 1) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 1, False)


        Tabelle3.Cells(NFR + i, 2) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 2, False)


    Next i

End Sub

尽管如此,我已经在不同的工作簿中使用了这段代码,它工作顺利,但在这里不起作用。相反,此行发生Run-time error '1004'

Tabelle3.Cells(NFR + i, 1) = Application.WorksheetFunction.VLookup(Tabelle5.Cells(i, 1), myrange, 1, False)

有没有人看到这个错误或者能告诉我我编码错了什么?

1 个答案:

答案 0 :(得分:0)

似乎Vlookup无法找到您正在寻找的值,因此会抛出错误。如果找不到值,Application.WorksheetFunction.VLookup将返回错误'1004'。请考虑以下测试:

  • 将单元格A2值设为15.
  • 在宏下运行

宏1:

Sub test1()

check = Application.WorksheetFunction.VLookup(15, Range("A1:A5"), 1, False)

Debug.Print check

End Sub

宏2:

Sub test2()

check = Application.WorksheetFunction.VLookup(1, Range("A1:A5"), 1, False)

Debug.Print check

End Sub

正如您所看到的,第二个引发了错误。要解决该问题,您应该将WorksheetFunction.VLoookup更改为Application.VLookup并执行错误检查:

Sub test2()

If IsError(Application.VLookup(1, Range("A1:A5"), 1, False)) = False Then

check = Application.VLookup(1, Range("A1:A5"), 1, False)

End If

Debug.Print check

End Sub

请同时查看此处:How to error handle 1004 Error with WorksheetFunction.VLookup?