Excel VBA在多个工作表中循环

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语句之前或之前的范围(set rng = …),我会得到错误。

提前感谢任何指针。

你应该为循环内的每个ws声明rng ,如:

 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 

现在你的代码是在你运行macros的时候, rng会指向ActiveSheet ,然后你的代码会在代码的每一次迭代中复制同一个单元。