Excel VBA循环遍历多个工作表

时间:2014-09-20 22:32:41

标签: excel vba 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语句之前或范围之前(设置rng = ...)时,我就会出错。

提前感谢任何指示。

1 个答案:

答案 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,然后您的代码将在代码的每次迭代中复制相同的单元格。