通过4个工作表创建循环粘贴不起作用

时间:2019-04-09 04:24:04

标签: excel vba

大家好,我正在为Udemy上一门课程,但不幸的是,讲师的反应不是最迅速的。

我有一本名为QuarterlyReport的工作簿和5张纸。

  1. 东部记录
  2. West Records
  3. 北部记录
  4. 南方唱片
  5. 年度报告

我的代码格式化工作表1-4,然后复制将信息粘贴到“年度报告”上最后一个未使用的行上。 由于某种原因,该代码仅粘贴South Records。我的目标是复制每张纸1-4,并将其粘贴到第五张纸“ YEARLY REPORT”。

Public Sub Finalreportloop()
    Dim i As Integer
    i = 1

    Do While i <= Worksheets.Count - 1
        Worksheets(i).Select

        AddHeaders
        FormatData
        AutoSum

        ' copy the current data
        Range("A1").Select
        Selection.CurrentRegion.Select

        Selection.Copy

        ' select the final report WS'
        Worksheets("yearly report").Select

        'find the empty cells

    LastRow = Sheets(i).Range("A" & Sheets(i).Rows.Count).End(xlUp).Row


       'paste the new data in
        ActiveSheet.Paste

            i = i + 1
    Loop
End Sub

Addheaders,FormatData和AutoSum参考我创建的其他模块。谢谢大家!

2 个答案:

答案 0 :(得分:0)

该代码确定要复制的工作表的最后一行,但是您不会对该信息进行任何操作。相反,它只是粘贴到活动工作表中并覆盖最后一个循环实例中发布的数据。因此,看起来好像只是在复制/粘贴最后一个数据集。

您需要在“年度”表中找到最后一行,然后将数据粘贴到该行下方。

答案 1 :(得分:0)

您可以尝试以下方法之一:

Option Explicit

Sub test()

    Dim ws As Worksheet
    Dim wsLastRow As Long, wsLastColumn As Long, yrLastRow As Long
    Dim rngCopy  As Range

    For Each ws In ThisWorkbook.Worksheets

        If ws.Name <> "YEARLY REPORT" Then

            With ws
                'Method 1 - You can siply used range
'                .UsedRange.Copy

                'Method 2 - You can calculate LastColumn & LastRow and create the range
                wsLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<- Find last row of column A.
                wsLastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column '<- Find the last column of row 1.
                Set rngCopy = .Range(Cells(1, 1), Cells(wsLastRow, wsLastColumn)) '<- Create the range to be copy.
                rngCopy.Copy

            End With

            With ThisWorkbook.Worksheets("YEARLY REPORT")
                yrLastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<- Find last row of column A.
                .Range("A" & yrLastRow + 1).PasteSpecial xlPasteValues
            End With

        End If

        Application.CutCopyMode = False

    Next ws

End Sub