Häufig passiert es, dass man mit einem bestimmten Objekt mehrere Dinge auf
einmal machen möchte. Um den Code zu vereinfachen, gibt es dafür die
With
-Anweisung. Das folgende Beispiel haben
wir so ähnlich schon einmal gesehen, hier ist es
für With
umgeschrieben.
Public Sub Autos() Dim Familienkutsche As New Auto With Familienkutsche .AirbagsEinbauen .Airbags(1).aktivieren .Airbags("Beifahrer").aktivieren End With End Sub
Zwischen With
und
End With
stehen alle Methoden, Eigenschaften,
Ereignisse und Unterobjekte des angegebenen Objekts zur Verfügung, ohne dass man
das Objekt nochmals angeben muss. Statt dessen beginnt man einfach mit einem Punkt.
IntelliSense hat mit dieser Schreibweise ebenfalls keine Probleme.
Gelegentlich möchte man Befehle an alle Objekte einer
Auflistung geben. Das könnte man zwar auch mit einer
herkömmlichen For-Next Schleife,
für Objekte ist allerdings For Each
effektiver.
Public Sub Unfall() Dim Porsche As New Auto Dim Luftkissen As Airbag For Each Luftkissen In Porsche.Airbags Luftkissen.aktivieren Debug.Print Luftkissen.Name & " ausgelöst!" Next End Sub
Nach dem In
-Schlüsselwort wird also die
Auflistung angegeben, davor steht ein Schleifenzähler vom gleichen Typ.
Da Objekte auch in Variant-Variablen gespeichert werden können, und Auflistungen
demzufolge in Variant-Arrays, wird For Each
in der Praxis auch häufig benutzt, um Variant-Arrays, die einer Prozedur als
ParameterArray übergeben wurden,
zu bearbeiten.
Sub Ergebnisse(Teilnehmer As String, ParamArray Noten()) Dim Note As Variant Debug.Print "--- " & Teilnehmer & " ---" For Each Note In Noten Debug.Print Note Next End Sub
Dieser Prozedur ist es völlig egal, wie viele Noten-Objekte ihr übergeben werden:
Ergebnisse "Müller", "gut", "ausreichend", "sehr gut" --- Müller --- gut ausreichend sehr gut