Ich versuche, ein einzelnes Makro auszuführen, das Funktionen auf mehreren Arbeitsblättern ausführt. Nehmen wir an, ich habe die Makroschaltfläche auf Arbeitsblatt 4 zugewiesen. Ich habe die Funktionen aufgeführt, die ich Schritt für Schritt ausführen möchte:
1) Wählen Sie bestimmte Zellen in Arbeitsblatt 4 aus und kopieren Sie sie in angrenzende Zellen in Arbeitsblatt 4.
2) Zellbereich im Arbeitsblatt 3 löschen.
3) CUT-Zellbereich in Arbeitsblatt 2 und fügen Sie diesen Zellbereich in Arbeitsblatt 3 ein.
4) Nehmen Sie den Zellbereich aus einer separaten Arbeitsmappe und kopieren Sie ihn in Arbeitsblatt 2. (Ich weiß, dass dies ein völlig anderes Problem ist, da die Arbeitsmappe automatisch veröffentlicht wird und ich einen Weg finden muss, um die beiden zu verknüpfen.)
5) Aktualisieren Sie die Pivot-Tabellen in Arbeitsblatt 4 und Arbeitsblatt 3.
Ich würde gerne bei den ersten drei Funktionen helfen. Ich habe meinen aktuellen Code unten eingefügt.
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
Es funktioniert ... aber es funktioniert nur, wenn ich mich im richtigen Arbeitsblatt befinde, um eine bestimmte Funktion auszuführen.
Durch das Entfernen von select
, selection
und activesheet
können Sie dieses Blatt unabhängig machen
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
Sie haben einen guten Start. Nur ein bisschen mehr Raffinesse und du wirst es haben.
Grundsätzlich ist es nicht erforderlich, Ihre Bereiche (Arbeitsblätter, Arbeitsblätter usw.) zumindest .Select
zu bearbeiten. Sie können direkt mit ihnen arbeiten und mit der Variable Copy
das Ziel angeben, an das sie kopiert werden sollen.
Siehe Code unten:
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
blätter ("Name1"). Bereich ("B29: B30"). Kopie Ziel: = Blätter ("Name2"). Bereich ("C29")
Wird von einem auf ein anderes Blatt kopiert, vorausgesetzt, die Blattnamen sind name1 und name2