Макрос VBA на нескольких листах
Я пытаюсь запустить один макрос, который выполняет функции на нескольких листах. Скажем, я назначил кнопку макроса на рабочем листе 4. Я перечислил функции, которые я хочу выполнить поэтапно:
1) Выберите определенные ячейки на листе 4 и скопируйте их в соседние ячейки на листе 4.
2) удалить диапазон ячеек на листе 3.
3) Диапазон CUT ячеек на листе 2 затем вставьте этот диапазон ячеек в рабочий лист 3.
4) Возьмите диапазон ячеек из отдельной книги и скопируйте их в рабочий лист 2. (Я знаю, что это совершенно другая проблема, так как книга автоматически публикуется, и мне нужно будет найти способ связать их.)
5) Обновить сводные таблицы, расположенные в Рабочем листе 4 и Рабочем листе 3.
Мне хотелось бы помочь в первых трех функциях этого. Я вставил свой текущий код ниже.
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Select
Selection.Copy
sh4.Range("C29").Select
ActiveSheet.Paste
sh3.Range("A4:AC1000").Select
Selection.Delete
sh2.Range("A4:AC1000").Select
Selection.Copy
sh3.Range("A4").Select
ActiveSheet.Paste
End Sub
Он работает... но он работает только тогда, когда я нахожусь в правильной рабочей таблице для выполнения определенной функции.
Ответы
Ответ 1
Удалив select
, selection
и activesheet
, вы сможете сделать этот независимый от листа
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
sh3.Range("A4:AC1000").Delete
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End Sub
Ответ 2
Вы отправитесь в отличное начало. Еще немного уточнения, и вы получите его.
В принципе, нет необходимости .Select
ваших диапазонов (листов, книг и т.д.), по крайней мере, в этом случае. Вы можете напрямую работать с ними и с помощью Copy
указать место назначения, в котором они будут скопированы.
Смотрите код ниже:
Sub START()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim wkb As Workbook
Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object
With wkb '-> now we can work with this object directly and succinctly
Set sh1 = .Sheets("Brand")
Set sh2 = .Sheets("CurrentWeek")
Set sh3 = .Sheets("PriorWeek")
Set sh4 = .Sheets("Pivot")
sh4.Range("B29:B30").Copy sh4.Range("C29")
'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it
sh2.Range("A4:AC1000").Copy sh3.Range("A4")
End With
End Sub
Ответ 3
листы ( "name1" ). диапазон ( "B29: B30" ). copy Назначение: = листы ( "имя2" ). диапазон ( "C29" )
Скопирует с одного листа на другой, если имена листов - это имя1 и имя2
Ответ 4
Sub START()
Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29")
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4")
End Sub