我已经开始研究VBA,并且停留在下面的代码中。
请帮帮我。
基本上,我试图从第一张纸和第二张纸中查找数据,并在第三张纸中生成查找值。
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
答案 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