Это не лучшее решение, но оно должно работать. Прежде чем запускать макрос, вам нужно убедиться, что ваш итоговый лист является активным листом.
Dim Summary As Worksheet: Set Summary = ActiveSheet
Sheets("Sample").Select
Range("B15:B29").Select
Selection.Copy
Summary.Select
Range("B15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Sample (2)").Select
Range("B15:B29").Select
Application.CutCopyMode = False
Selection.Copy
Application.CutCopyMode = False
Selection.Copy
Summary.Select
Range("C15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Что это делает сохранить ссылку на активный лист (ваш сводной) и использует эту ссылку, чтобы вспомнить лист при копировании данных.
Создание ссылок на рабочие листы (Dim Sheet As Worksheet
, а затем назначение листа на него) позволяет вам получить доступ к данным на этом листе без необходимости его активации, что может помочь упростить код. Пример ниже должен иметь тот же результат, что и выше. Итоговый лист по-прежнему должен быть активным, прежде чем запускать его.
Dim Summary As Worksheet: Set Summary = ActiveSheet
Dim S1 As Worksheet: Set S1 = ThisWorkbook.Worksheets("Sample")
Dim S2 As Worksheet: Set S2 = ThisWorkbook.Worksheets("Sample (2)")
Application.ScreenUpdating = False
S1.Range("B15:B29").Copy
Summary.Range("B15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
S2.Range("B15:B29").Copy
Summary.Range("C15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.ScreenUpdating = True
Другие примеры! это позволяет заранее определить, сколько у вас «пробных» листов, без необходимости кодировать их по отдельности (надеюсь, не проверял его)
Dim Summary As Worksheet: Set Summary = ActiveSheet
Dim Source As Worksheet
Dim Index As Integer
Dim Name As String
Application.ScreenUpdating = False
' index represents the range of your sample sheets
' below my example assumes you have 5
For Index = 1 To 5
' generate the name of the worksheet
Name = "Sample" & IIf(Index > 1, " (" & Index & ")", "")
Set Source = ThisWorkbook.Worksheets(Name)
Source.Range("B15:B29").Copy
' using .Cells instead of .Range allows you to reference cells numerically
' so below its row 15 and the column changes depending on the index
' the +1 is there as your example starts at column B
Summary.Cells(15, Index + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Next Index
Application.ScreenUpdating = True
Благодарим Вас за отзыв! Я обнаружил, что было проще связать макрос с кодовым именем, а не с именем листа. Например, мои листы называются Sheet101, Sheet102 ... и т. Д. Вместо того, чтобы писать его как Таблицы («Образец»). Выберите «Я изменил его на Лист101». Выберите. Мой следующий вопрос: как закончить макрос, скажем, мне нужно всего 2 листа вместо 3? Есть ли условное утверждение, которое будет работать в основном для завершения или продолжения? – user26133
'if msgbox (" continue? "," ", VbYesNo) = vbNo затем выйти для' insert, что внутри цикла for, непосредственно перед 'следующей' строка – NickSlash
Извините, но я не уверен, что вы имеете в виду по «For Loop». Я очень ценю вашу помощь сегодня вечером. – user26133