Spezielle Objektanweisungen

With

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.

For Each .. Next

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