VBA初学者,我对我正在进行的计划遇到了一些问题。
我需要从第一个工作表中复制B列中最后一个单元格中的数据,然后将其粘贴到另一个工作表xws中的A列中,并对包含数据的其他五个工作表重复此操作。
这里是代码,它不会按照应有的方式运行:
Sub exercise()
Dim ws As Worksheet
Dim rng As Range
'Finding last row in column B
Set rng = Range("B" & Rows.Count).End(xlUp)
For Each ws In ActiveWorkbook.Worksheets
'Don't copy data from xws worksheet
If ws.Name <> "xws" Then
'Storing first copied data in A1
If IsEmpty(Sheets("xws").[A1]) Then
rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp)
'Storing next copied data below previously filled cell
Else
rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End If
End If
Next ws
End Sub
ws存在问题。引用,但每当我把它放在if语句之前或范围之前(设置rng = ...)时,我就会出错。
提前感谢任何指示。
答案 0 :(得分:8)
您应该为循环内的每个rng
声明ws
,例如:
Sub exercise()
Dim ws As Worksheet
Dim rng As Range
For Each ws In ActiveWorkbook.Worksheets
'Finding last row in column B
Set rng = ws.Range("B" & ws.Rows.Count).End(xlUp) '<~~ Moved inside the loop
'Don't copy data from xws worksheet
If ws.Name <> "xws" Then
'Storing first copied data in A1
If IsEmpty(Sheets("xws").[A1]) Then
rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp)
'Storing next copied data below previously filled cell
Else
rng.Copy Sheets("xws").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End If
End If
Next ws
End Sub
正如您的代码现在,rng
将在您运行宏时指向ActiveSheet
,然后您的代码将在代码的每次迭代中复制相同的单元格。