Макрос VBA на нескольких листах

Я пытаюсь запустить один макрос, который выполняет функции на нескольких листах. Предположим, я назначил кнопку макроса на листе 4. Я перечислил функции, которые я хочу, чтобы он выполнял шаг за шагом:

1) Выберите определенные ячейки на листе 4 и скопируйте в соседние ячейки на листе 4.
2) удалить диапазон ячеек на листе 3.
3) Вырежьте диапазон ячеек на листе 2, затем вставьте этот диапазон ячеек в лист 3.
4) Берем диапазон ячеек отделите книгу и скопируйте в рабочий лист 2. (Я знаю, что это совершенно другая проблема, поскольку книга автоматически публикуется, и мне нужно будет найти способ связать их.)
5) обновление сводных таблиц, расположенных в пределах листа 4 и листа 3.

Я хотел бы помочь на первых 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

это работает... но он работает только тогда, когда я нахожусь в правильном листе для выполнения определенной функции.

4 ответов


на удалении 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

вы отправляетесь в большое начало. Еще немного утонченности, и вы получите это.

в принципе, не нужно .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

листы ("name1").диапазон ("B29:B30").копировать назначение:=листы ("name2").диапазон("С29")

будет копировать с одного листа на другой, предполагая, что имена листов name1 и name2


Sub START()

Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29")
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4")

End Sub