Diese Entscheidungsstruktur gibt es in zwei Formen: Einzeilig und strukturiert. Bei einzeiliger Verwendung gilt die Syntax:
| 'einzeilige Syntax If Bedingung Then Anweisung1 [Else Anweisung2] 'mehrzeilige Syntax If Bedingung1 then Anweisungen 1 ElseIf Bedingung2 thenAnweisungen 2 ....Else Anweisungen X Endif |
In strukturierter Form werden mehrere Zeilen benötigt. Dabei kann eine beliebige Zahl von ElseIf -Abfragen eingeschoben werden. Auf diese Weise kann eine Mehrfachverzweigung konstruiert werden. Wichtig ist jedoch, daß stets nur ein Anweisungszweig ausgeführt wird. Wenn mehrere Bedingungen zutreffen, führt nur die jeweils erste zu einer Anweisungsfolge und dann zum Verlassen der Entscheidungsstruktur.
In beiden Formen der If-Abfrage kann höchstens einmal "Else" verwendet werden. Es bedeutet nämlich "alle anderen Fälle".
Diese Auswahlstruktur prüft, ob die hinter Case angegebenen Variablenwerte den tatsächlichen entsprechen und führt gegebenenfalls den zugehörigen Anweisungsblock aus. Hinter Case kann auch eine durch Komma getrennte Menge von Variablenwerten folgen. CaseElse kommt dann zur Ausführung, wenn es vorher keinen Treffer gab.
| Select Case VariablenName Case Variablenwert 1 Anweisungen 1 Case Variablenwert 2Anweisungen 2 ...[Case Else Anweisungen X] End Select |
Einfache Auswahl unter zwei oder mehr Möglichkeiten. Es wird der Wert zurückgeliefert, bei dem die Bedingung erfüllt ist.
| wert = Switch ( Bedingung1, Wert1 [, Bedingung2, Wert2... ]) |
Liefert in Abhängigkeit von der Bedingung den ersten Wert (bei true) sonst den zweiten (bei false)
| wert = IIf ( bedingung, wert1, wert2) |
Liefert je nach dem Zahlenwert von zahl den ersten, zweiten, ... Wert zurück.
| wert = Choose ( zahl, wert1, wert2, wert3, ..) |
Die variabelste Schleifenstruktur.
| Abbruchbedingung am Anfang | Abbruchbedingung am Ende |
| Do [while | until ] Bedingung [Anweisungen] [if Bedingung then Exit Do] [Anweisungen] Loop | Do [Anweisungen] [if Bedingung then Exit Do] [Anweisungen] Loop [while | until ] Bedingung |
In den Fenstern jeweils eine Exit Do-Klammer als Option eingefügt. Das vorzeitige Verlassen einer Schleifenstruktur sollte im Programm die absolute Ausnahme sein. Ein möglicher, legitimer Fall ist das Auftretens eines Fehlers.
Eine notwendige Anmerkung zu den Abbruchbedingungen: Man muß immer sicherstellen, daß Abbrüche auch eintreten können. Wenn ein "Wert1" z.B. in Zehntel-Schritten anwächst, dann führt eine Bedingung "Wert1=1999" mit ziemlicher Sicherheit nicht zum Schleifenabbruch. Wert1 wird nämlich stattdessen so etwas wie die Folge 1998,999933 .. 1999,000033 durchlaufen. In solchen Fällen besser "Wert1>=1999" wählen.
Wenn die Anzahl erforderlicher Umläufe vorher bekannt ist, hat die For .. Next-Schleife Vorteile, weil sie schnell und platzsparend abgearbeitet wird. Wird Step nicht angegeben, dann wird der Zähler bei jedem Umlauf um 1 erhöht. Beliebter Fehler: Die Zählvariable kann innerhalb der Schleife (ungewollt) manipuliert werden, die Schleife bricht zum falschen Zeitpunkt oder gar nicht mehr ab.
| For Zähler = Anfang to Ende [Step Schritt] [Anweisungen] Next |
Eine ähnliche Struktur wie die For ... Next -Schleife hat die For Each...Next-Schleife, die Anweisungen für alle Elemente eines Datenfeldes oder einer Auflistung ausführt. (Nichts für Anfänger!)
| For Each element In gruppe [Anweisungen] Next |
| While Bedingung [Anweisungen] Wend |
Eine Schleife, die prinzipiell nur einmal durchlaufen wird, also eigentlich keine ist:
| With Objekt [Anweisungen] [If Bedingung Exit With] [Anweisungen] End With |
Die With-Konstruktion erleichtert lediglich die Schreibung und erhöht die Ausführungsgeschwindigkeit. So genügt für einen benutzerdefinierten Datentyp die einmalige Angabe des Namens in der Kopfzeile, Zuweisungen erfolgen dann im Funktionskörper mit der Syntax ".zugehörige_Variable = ...".