【问题标题】:Excel VBA VLookup Run-time error '1004'Excel VBA VLookup 运行时错误“1004”
【发布时间】:2018-04-26 22:05:10
【问题描述】:

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

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

【问题讨论】:

  • NFR的定义为什么要用Offset(-3)?
  • @CFO 我必须设置 i=4 因为在 Tabelle 5 我需要的数据从 row 4 开始。如果我像这样将它转移到Tabelle 3 中的NFR,将会有3 行的间隙。因此我Offset(-3) rows

标签: vba excel runtime-error vlookup


【解决方案1】:

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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多