Ты почти там, судя по всему.Похоже, вы записали макрос, который является хорошим местом для начала.Причина, по которой ваш конкретный код может не работать, из-за Sheets("Master Sheet").Range("A2:L10000).Clear
.Вам не хватает конечной кавычки внутри диапазона.В любом случае, я предпочел пропустить это, чтобы вы случайно не очистили свой лист при перемещении данных по
Так что обычно лучше избегать использования select
и activate
,но с рекордером вы не можете сказать много по этому вопросу.Ниже вы можете увидеть, как я могу делать операции напрямую с диапазоном.
Важно каждый раз находить последнюю строку мастер-листа, а также текущий лист, чтобы знать диапазон, который вы хотите скопировать, и место, куда вы можете его вставить.Важно помнить, что вы всегда находите последнюю заполненную ячейку, поэтому в случае места назначения вставки вам необходимо добавить еще одно значение строки, чтобы случайно не перезаписать некоторые данные.
Поскольку циклы довольно полезны, я не уверен, какие имена у вас есть для остальных ваших листов, но, к счастью, в VBA вы можете использовать For each
.так, что это делает, это циклически перебирает каждый элемент, который вы укажете.В этом случае я указал рабочие листы.Однако единственная проблема сейчас заключается в том, что мы не хотим пытаться копировать и вставлять в один и тот же мастер-лист, поэтому нам нужно быстро проверить, чтобы убедиться, что мы не на мастер-листе.Я сделал это, просто сравнив имя рабочего листа с тем, которое вы указали в качестве имени основного листа.
Интересно, что когда вы копируете что-то, вам нужно только указать верхнюю левую ячейку изаполню все остальное.Это делает жизнь немного проще, потому что вам не нужно вычислять точные размеры массива, который вы вставляете.Функция Copy
в VBA имеет необязательный параметр, называемый Destination
, который можно использовать, чтобы указать, куда вы хотите сразу вставить его.
Также полезно полностью указывать диапазоны при их использовании.поэтому вместо Range
вы можете увидеть, как я использую ThisWorkbook.Worksheets("Master Sheet").Range
.Это говорит компьютеру, где именно вы хотите сослаться;тогда как Range
делает компьютер своего рода догадкой, поэтому он предполагает, что вы имеете в виду активный лист, который может быть не тем, что вы хотите.
Sub Paster()
Dim LastRowCurr As Long
Dim LastRowMaster As Long
Dim wksht As Worksheet
For Each wksht In ThisWorkbook.Worksheets
If Not wksht.Name = "Master Sheet" Then
LastRowCurr = wksht.Cells(wksht.Rows.Count, 1).End(xlUp).Row
LastRowMaster = Worksheets("Master Sheet").Cells(Worksheets("Master Sheet").Rows.Count, 1).End(xlUp).Row + 1
Range("A2:L" & LastRowCurr).Copy Destination:=ThisWorkbook.Worksheets("Master Sheet").Cells(LastRowMaster, "A")
End If
Next wksht
End Sub