Excel VBA nacheinander alle Tabellenblätter auswählen Makro ausführen und bei letztem beenden?

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

Suboptimierer  09.01.2018, 16:50

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.

0
Suboptimierer  09.01.2018, 17:01
@Suboptimierer

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
0
Gipfelstuermer 
Fragesteller
 09.01.2018, 18:21
@Suboptimierer

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. 

0