Visual Basic for Applications Grundlagen: Die If-Abfrage

Der Makrorekorder zeichnet einen Befehl nach dem anderen auf. Er kann nicht Befehle wiederholen oder bestimmte Bedingungen bei der Aufzeichnung schon mitberücksichtigen. Dies aber macht ein Makro erst leistungsfähig und flexibel einsetzbar. Befehle zur Steuerung des Programmablaufs gehören heute zum Standardumfang einer guten Programmiersprache.

Es stehen eine Vielzahl von Befehlen für die Programmsteuerung in Visual Basic for Applications zur Verfügung. Der Call-Befehl ist nur einer von ihnen. Er wurde bereits im Abschnitt Prozeduren und Funktionen behandelt. In diesem Abschnitt wollen wir weitere Befehle zur Programmkontrolle kennenlernen, die auch ineinander verschachtelt werden können. Sie sollten davon allerdings nur vorsichtig Gebrauch machen, da ab vier Verschachtelungsebenen die Übersicht verloren geht und die Programmlogik nicht mehr durchschaubar ist.

Die If-Abfrage

Oftmals müssen in Programmen Entscheidungen gefällt werden. Sei es das bestimmte Befehle ausgeführt oder deren Ausführung sogar verhindert werden muß. Tritt ein solcher Fall ein, dann ist stets der If-Befehl einzusetzen. Er allein ermöglicht es schnell eine bestimmte Bedingung auszuwerten und in Bezug auf das Ergebnis zu reagieren.

Die Syntax des If-Befehls lautet:

If Bedingung Then VBABefehl

Die Zeile kann so gelesen werden; Ist die Bedingung erfüllt dann bitte den VBABefehl ausführen. Dabei ist Bedingung ein numerischer Ausdruck, der als Ergebnis wahr oder falsch liefern muß. Ein Beispiel:

If A = 6 Then B = 0

Falls die Variable A den Wert 6 besitzt, wird der Variablen B der Wert 0 zugewiesen. Dieses Format des If-Befehls wird für einzelne Instruktionen verwendet. Falls Sie aber größere If-Strukturen aufbauen wollen, müssen Sie das folgende Format verwenden:

If Bedingung Then

VBABefehl

VBABefehl

VBABefehl

End If

Ist die Bedingung erfüllt, dann werden die Befehle zwischen If und End If ausgführt. Ist die Bedingung nicht erfüllt, dann wird das VBA-Programm hinter dem End If-Befehl fortgesetzt.

Das folgende Makro schaltet für den markierten Text das Fett-Attribut aus und stellt ihn kursiv dar. Das alles wird davon abhängig gemacht ob der Text fett dargestellt ist.

Sub WortAufKursiv()

‚ WortAufKursiv Makro

‚ Stellt ein Wort von fetter auf kursiver Schrift um.

Selection.MoveLeft Unit:=wdWord, Count:=1

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

If Selection.Font.Bold = True Then

Selection.Font.Italic = True

Selection.Font.Bold = False

End If

End Sub

Makro zur Umschaltung von Bold auf Italic mit Hilfe einer If-Anweisung.

Ist die Bedingung nicht erfüllt, dann wird die Abarbeitung nach dem End If-Befehl fortgesetzt. Dies kann aber unter Umständen nicht gewünscht sein. Angenommen Sie wollen ein markiertes Wort in fett formatieren, wenn es nicht fett dargestellt ist. Falls es aber fett formatiert ist, soll es wieder normal dargestellt werden. Dies läßt sich unter Visual Basic for Applications durch den Parameter wbToggle lösen aber hier wollen wir es einmal selbst programmieren und zwar mit einer If-Then-Else-Struktur. Das folgende Makro zeigt den Programmcode:

Sub ToggleBold()

‚ ToggleBold Makro

‚ Wechselt das Fett-Attribut.

Selection.MoveLeft Unit:=wdWord, Count:=1

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

If Selection.Font.Bold = True Then

Selection.Font.Bold = False

Else

Selection.Font.Bold = True

End If

End Sub

Makro zur Umschaltung des Fett-Attributs

Sie können in Ihrer If-Bedingung auch eine weitere If-Bedingung mit einfließen lassen. Die If-Struktur erweitert sich damit um den ElseIf-Befehl. Die Struktur des vollständigen If-Befehls sieht dann so aus:

If Bedingung1 THEN      ‘Bedingung1 erfüllt?

VBABefehle          ‘Ja

ElseIf Bedingung2 Then  ‘Nein, Bedingung2 erfüllt?

VBABefehle      ‘Ja

Else                     ‘Nein

VBABefehle          ‘keine Bedingung war erfüllt

End If

Es gibt keine Beschränkung für die Anzahl der ElseIf-Anweisungen. Sie sollten die If-Struktur aber nicht zu aufwendig werden lassen. Nach vier bis fünf ElseIf-Anweisungen weiß keiner mehr was eigentlich abgefragt werden sollte. Dazu eignet sich die Select … Case-Anweisung wesentlich besser.

Nach oben scrollen