Создание цикла через 4 листа Вставить не работает - PullRequest
0 голосов
/ 09 апреля 2019

Привет, ребята, я делаю курс для Удеми, и лектор, к сожалению, не был самым отзывчивым.

У меня есть книга под названием QuarterlyReport и 5 листов.

  1. Восток Рекордс
  2. West Records
  3. North Records
  4. South Records
  5. Годовой отчет

Мой код форматирует рабочие таблицы 1-4, а затем копирует и вставляет информацию в годовой отчет по последней неиспользованной строке. По какой-то причине код только вставляет South Records. Моя цель - скопировать каждый лист 1 - 4 и вставить его на пятый лист «ГОДОВОЙ ОТЧЕТ».

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 голосов
/ 09 апреля 2019

Вы можете попробовать один из следующих способов:

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
0 голосов
/ 09 апреля 2019

Код определяет последнюю строку листа, с которого вы копируете, но вы ничего не делаете с этой информацией.Вместо этого он просто вставляется в активный лист и перезаписывает данные, размещенные в последнем экземпляре цикла.Следовательно, это выглядит так, как будто это только копирование / вставка последнего набора данных.

Вам нужно найти последнюю строку в годовом листе, а затем вставить данные под этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...