表格中的VLookup代码错误-运行时错误1004

时间:2019-02-03 10:05:21

标签: excel vba syntax-error vlookup

我已经开始研究VBA,并且停留在下面的代码中。

请帮帮我。

基本上,我试图从第一张纸和第二张纸中查找数据,并在第三张纸中生成查找值。

第1张

第2张纸

第3张纸

Sub Semi_Open()

Application.ScreenUpdating = False

'********************************************
'*** RESPONDENT WISE DATA PREPARATION ***
'********************************************

Sheets(1).Columns(1).Copy Destination:=Sheets(3).Columns(1)
Sheets(1).Rows(1).Copy Destination:=Sheets(3).Rows(1)

Sheets(3).Select
Cells(1, 1).Select

ActiveCell.SpecialCells(xlLastCell).Select
mrow = ActiveCell.Row
mcolumn = ActiveCell.Column

For j = 2 To mcolumn
For i = 2 To mrow
Cells(i, 2) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 2), Sheets(2).Range("A:MAA"), 2, False)
Next i
Next j


End Sub

1 个答案:

答案 0 :(得分:0)

您应该注意一些代码: 1)您关闭了屏幕更新,但是再也没有打开它。我建议保持打开状态直到您的代码起作用,以便您可以查看正在发生的情况。 2)最好声明您的变量。 Mrow,Mcolumn,i和j应该声明为long。 3)尽量避免使用Select。您变得依赖于光标的位置,并且它通常最终无法正常工作,这就是为什么会出现错误。您尝试选择Cells(1,1),但未声明要从中选择的工作表。假设您要从Sheets(1)中进行选择,但是不能,因为您已经选择了Sheets(3)。 4)缩进您的代码。更容易阅读,也更容易遵循循环和if / then语句。

重写现有代码如下:

Sub Semi_Open()

    Dim mrow As Long
    Dim mcolumn As Long
    Dim j As Long
    Dim i As Long

    Sheets(1).Columns(1).Copy Destination:=Sheets(3).Columns(1)
    Sheets(1).Rows(1).Copy Destination:=Sheets(3).Rows(1)

    mrow = Sheets(3).Cells(Rows.Count, 1).End(xlUp).Row
    mcolumn = Sheets(3).Cells(1, Columns.Count).End(xlToLeft).Column

    For j = 2 To mcolumn
        For i = 2 To mrow
            Sheets(3).Cells(i, 2) = Application.WorksheetFunction.VLookup(Sheets(1).Cells(i, 2), Sheets(2).Range("A:MAA"), 2, False)
        Next i
    Next j

End Sub