Excel VBA循环遍历多个工作表

10

我是一名初学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之前或范围之前(设置范围为...)都会出现错误。

提前感谢任何指导。


当我从活动工作表启动宏时,我会将相同的信息复制到工作表xws的六个单元格(A1:A6)中,仅来自活动工作表。 - Timbo
1个回答

13

您应该在循环中为每个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

根据你现有的代码,rng将指向你运行宏时的ActiveSheet,并且你的代码会在每次迭代期间复制相同的单元格。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接