Макрос 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