首页 > 解决方案 > Excel VBA VLookup 运行时错误“1004”

问题描述

我想合并两张纸。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)

有没有人看到错误或可以告诉我我的编码错误?

标签: vbaexcelruntime-errorvlookup

解决方案


似乎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.VLoookupApplication.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?


推荐阅读