Excel VBA nacheinander alle Tabellenblätter auswählen Makro ausführen und bei letztem beenden?
Hallo zusammen,
ich hätte da folgendes Anliegen.
Ich versuche ein Makro ausführen, dass an einer bestimmten Stelle auf dem PC liegt und nur via Schnellzugriffsleiste eingebunden wurde. Da es allerdings so programmiert wurde, dass es immer nur für den aktuellen Tab (Arbeitsblatt) die Arbeiten ausführt, muss ich es jedes mal in jedem Arbeitsblatt neu ausführen, da aber in einer Arbeitsmappe gut und gerne auch mal 45 Arbeitsblätter gibt, ist das sehr mühselig, da es jedes mal 10sek oder mehr arbeitet und in der Zeit kann man nicht arbeiten.
Daher wäre es jetzt mein Ziel, ein zweites Makro zu programmieren, das dieses Makro ausführt, dann das Arbeitsblatt wechselt erneut ausführt usw. usf. bist zum letzten Arbeitsblatt.
Zum ermitteln des letzten Arbeitsblattes wollte ich unabhängig vom Namen des Arbeitsblattes diese über Worksheets(x).Select, bei welchen ich zuvor das letzte über ThisWorkbook.Worksheets().Count ermitteln.
Allerdings will das alles nicht so richtig funktionieren.
Kann mir einer helfen, wie ich dies bewerkstelligen könnte, es darf auf keinen Fall vom Namen abhängig sein, da diese pro Mappe anders sind.
Vielen Dank für die Hilfe im Voraus und die Ideen.
1 Antwort
Öffne ein neues Modulblatt und gib folgendes ein:
Sub WorksheetLoop()
Dim WS_Count As Integer
Dim I As Integer
WS_Count = ActiveWorkbook.Worksheets.Count
For I = 1 To WS_Count
' Hier Code, der auf allen Blätter ausgeführt werden muss einfügen
MsgBox ActiveWorkbook.Worksheets(I).Name
Next I
End Sub
Hast recht. Die Worksheets werden tatsächlich ab 1 hochgezählt. Ich habe es gerade getestet.
Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets Debug.Print ws.Name & " " & ws.Index Next
Vielen Dank für Eure schnellen Antworten kurze Frage, ich weiß nicht wie Excel arbeitet daher will ich mal darstellen was ich meine. Mal angenommen es wurden vom Ersteller einst 5 Arbeitsblätter angelegt im Anschluss haben die, logischerweise den Arbeitsblattindex von 1 bis 5, nun wird Z.B. Blatt 2 gelöscht und dafür ein neues 6. angelegt wird das von Excel automatisch in die nun vorhandene Lücke (Index 2) einsortiert oder rutschen alle dahinter liegenden auf und wie wird der Index bestimmt, anhand der Reihenfolge unten links in der Mappe oder wir läuft das ab, weiß dazu einer was.
Weshalb ich frage, wenn Excel nicht aufrutdcht könnten ja Lücken entstanden sein im Index und wenn nun ein Makro versucht wird auszuführen, dann wird dieses eine Tavellenblatt zu öffne was gar nicht existiert.
Bei 45 Arbeitsblättern besser Debug.Print anstelle von MsgBox ;)
Noch eine kleine Anmerkung: Man müsste es noch überprüfen, aber ich meine, dass die Arbeitsblätter von 0 an durchgezählt werden.