vba - 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)
有没有人看到错误或可以告诉我我的编码错误?
解决方案
似乎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?
推荐阅读
- vim - 从语法集群中删除 @Spell
- python - ADF 使用 python 删除活动 - 无法创建日志记录
- postgresql - 如何连接到在 docker 中运行的 postgres 实例?
- vuejs2 - 如何在 Vuejs 中有条件地显示数据
- vb.net - 创建一个等待延迟替代 Application.DoEvents
- .htaccess - 将旧网址重定向到 htaccess 中的新网址?
- python - 可通过密码访问的 Django 页面
- android - 是否可以要求 Android Keystore 的应用特定 PIN 身份验证
- average - 将行添加到列
- javascript - 正确格式化文档标题的时间