我想巩固两张纸。在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)
有没有人看到这个错误或者能告诉我我编码错了什么?
答案 0 :(得分:0)
似乎Vlookup
无法找到您正在寻找的值,因此会抛出错误。如果找不到值,Application.WorksheetFunction.VLookup
将返回错误'1004'。请考虑以下测试:
宏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?