web-dev-qa-db-de.com

VBA-Makro für mehrere Arbeitsblätter

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.

10
kmiao91

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
13
nutsch

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
5
Scott Holtzman

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

0
jstiene