Mit diesem Beitrag endet die kleine Serie um die Schleifen in VBA.
Die For-Each-Schleife ist eine hochinteressante Angelegenheit. Sie arbeitet nicht mit Wahrheitswerten oder Zählern, sondern mit Objekten, die Auflistungen enthalten. Wieviele Elemente die Auflistung hat, ist nicht weiter wichtig, denn „For-Each“ durchläuft alle Elemente eines Bereiches, soweit die gesetzten Bedingungen erfüllt sind.
Anhand von drei Beispielen soll dir die Wirkungsweise der For-Each-Schleife erläutert werden.
1. Namen aller Arbeitsblätter mit einer MsgBox anzeigen
Du willst Dir durch eine MsgBox die Namen aller Arbeitsblätter (Worksheets) dieser Arbeitsmappe (ThisWorkbook) anzeigen lassen. Dazu deklarierst Du die Variable wsBlatt und schreibst den restlichen Code.
Sub Each1()
Dim wsBlatt As Worksheet
For Each wsBlatt In ThisWorkbook.Worksheets
MsgBox wsBlatt.name
Next wsBlatt
End Sub
Die MsgBox teilt Dir nun nacheinander die Namen aller Arbeitsblätter in Deiner Arbeitsmappe mit. Sind das mehr als 10, hast Du sicher ein Problem damit, jedesmal „OK“ auf der MsgBox zu klicken. Dir nur einen Teil anzeigen zu lassen, ergibt keinen Sinn, dann musst Du nicht mit „For-Each“ arbeiten.
Alternativ könntest Du Dir die Namen in einem Arbeitsblatt auflisten lassen, z.B. so: Du deklarierst zusätzlich eine Zählvariable und ordnest ihr z.B. den Wert 499 zu, das soll die erste Zeile sein.
Sub Each2()
Dim intZähler As Integer
Dim wsBlatt As Worksheet
intZähler=499
For Each wsBlatt In ThisWorkbook.Worksheets
Range(„H“&intZähler)=wsBlatt.name
intZähler=intZähler+1
Next wsBlatt
End Sub
2. Zahlen fett schreiben, wenn der Wert größer ist als …
Im nächsten Beispiel greifst Du auf einen Bereich mit Zahlenwerten zu. Alle Zellen in einem manuell markierten Bereich sollen fett geschrieben werden, wenn deren Wert größer als 150 ist. Im Bereich H514:H525 markierst Du ein paar Zellen (z.B. H515:H519) und lässt anschließend das folgende Makro laufen:
Sub Each3()
Dim objZelle As Object
For Each objZelle In Selection
If objZelle.Value > 150 Then
objZelle.Font.Bold = True
End If
Next objZelle
End Sub
Das hat dann auch so funktioniert.
3. Werte des aktuellen Datenfeldes mit MsgBox anzeigen
In einem letzten Beispiel lässt Du Dir durch eine MsgBox die Werte des aktuellen Datenfeldes mitteilen: Dazu deklarierst Du zwei Variablen vom Typ Range (Bereich). Einmal rngZelle, das ist die gerade aktive Zelle und einmal rngWerte, das ist der Bereich, in dem Du schrittweise die Werte abfragst.
Sub Each4()
Dim rngZelle As Range
Dim rngWerte As Range
Set rngWerte=Range(„H531:H535“)
For Each rngZelle In rngWerte
MsgBox „Aktuelles Element hat den Wert: “ & rngZelle
Next
End Sub
Neu in diesem Code ist das Referenzieren, das geschieht durch die Anweisung „Set“.
Damit bin ich mit der Artikelserie rund um die VBA-Programmierung von Schleifen am Ende. In fünf Teilen habe ich Dir an einfachen Beispielen gezeigt, worum es geht und was Du so mit Schleifen machen kannst. Bestimmt werden Dir viele viele andere Anwendungsfälle einfallen.
Entdecke mehr von Clevercalcul
Subscribe to get the latest posts sent to your email.