繁体   English   中英

Excel VBA循环遍历多个工作表

[英]Excel VBA looping through multiple worksheets

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 = ...)时,我就会出错。

提前感谢任何指针。

你应该为循环中的每个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 ,然后您的代码将在代码的每次迭代中复制相同的单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM