Visual Basic for Applications Grundlagen: Prozeduren

Prozeduren und Funktionen stellen das Kernstück der Visual Basic for Applications-Programmierung dar. Würden diese beiden Arten der Programmierung nicht existieren, dann wären umfangreiche Makros nicht mehr überschaubar. In einer Prozedur oder Funktion werden Befehlsfolgen zusammengefaßt die eine kleine überschaubare Aufgabe lösen.

Der Unterschied zwischen Prozeduren und Funktionen besteht darin, daß Funktionen einen Wert an den Programmteil zurückgeben, von dem sie gerufen wurden. Sie werden feststellen, daß bei Funktionen häufig ein boolscher Wert zurückgegeben wird. Es läßt sich über einen boolschen Wert nämlich sehr einfach ermitteln, ob eine Funktion mit einem Fehler abgeschlossen wurde – dann wird normalerweise der boolsche Wert FALSE zurückgegeben – oder nicht. Im Erfolgsfall wird der Wert TRUE an den aufrufenden Programmteil zurückgegeben.

Schauen wir uns ein Beispiel für eine Prozedur an. Die Prozedur WortFettKursiv markiert zuerst das Wort unter dem Cursor und weist ihm dann die Textattribute Bold (Fett) und Italic (Kursiv) zu. Falls das Wort unter dem Cursor bereits mit den Textattributen Bold und Italic belegt ist, werden diese wieder entfernt. Dies wird durch den Parameter wdToggle bestimmt.

Sub WortFettKursiv()

‚ WortFettKursiv Makro

‚ Stellt ein Wort in fetter und kursiver Schrift dar.

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

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

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

End Sub

Die Prozedur WortFettKursiv als Beispiel für eine Prozedur.

Prozeduren werden immer durch den Befehl Sub gefolgt vom Namen der Prozedur eingeleitet. Beendet werden Prozeduren immer durch die Befehle End Sub. Bei Funktionen verhält es sich sehr ähnlich, hier wird anstelle des Befehls Sub der Befehl Function eingesetzt. Da Funktionen einen Wert zurückgeben, folgt dem Funktionsnamen der Datentyp des zurückgegeben Werts. Funktionen werden beendet durch die Befehle – Sie ahnen es bereits – End Function. Über Datentypen werden Sie im entsprechenden Abschnitt noch weiteres erfahren. Das Beispiel WortFettKursiv könnte als Funktion so aussehen.

Function WortFettKursiv2() As Boolean

‚ WortFettKursiv2 Makro

‚ Stellt ein Wort in fetter und kursiver Schrift dar.

‚ Beispiel für eine Funktion.

On Error GoTo Ende

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

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

Selection.Font.Bold = wdToggle

Selection.Font.Italic = wdToggle

WortFettKursiv2 = True

Ende:

WortFetKursiv2 = False

End Function

Das Makro WortFettKursiv als Funktion mit Fehlererkennung.

Aufrufen von Prozeduren

Damit Prozeduren von anderen Programmteilen erreicht werden können, muß lediglich der Befehl Call Prozedurname in dem aufrufenden Programmteil angegeben werden. Der Aufruf von Funktionen ist etwas komplizierter und wird erst später im Zusammenhang mit Variablen erläutert.

Als Beispiel wählen wir eine sogenannte Messagebox. Dies ist die einfachste Art, dem Anwender eine Nachricht über ein Ereignis oder einen Fehlerzustand zu geben. In unserem Beispiel wird eine Meldung angezeigt, die der Anwender mit der Schaltfläche OK bestätigen muß. Danach wird das Meldungsfenster wieder geschlossen.

Zur Anzeige von Meldungen dient der Befehl MsgBox gefolgt von einer Vielzahl Parameter, die nicht unbedingt alle angegeben werden müssen. Damit der Anwender der Meldung erhöhte Aufmerksamkeit schenkt, soll das Informations-Icon in der Messagebox angezeigt werden. Dazu wird der Parameter vbInformation angegeben. Das Fenster sollte auch einen sinnvollen Titel bekommen, dieser wird in unserem Fall als letzter Parameter angegeben.

Public Sub MeldungAusgeben()

‚ Gibt eine Meldung in einer Message box aus.

Beep

MsgBox „Das Word 2000 Buch.“, vbInformation, „VBA-Beispiel“

End Sub

Die Prozedur MeldungAusgeben.

Damit der Aufruf der Prozedur getestet werden kann, erstellen wir die Prozedur MeldungAufrufen. Hierzu wird über den Befehl Call MeldungAusgeben die vorher definierte Prozedur aufgerufen.

Sub MeldungAufrufen()

‚ Ruft die Prozedur MeldungAusgeben() auf.

Call MeldungAusgeben

Beep

End Sub

Aufruf der Prozedur MeldungAusgeben mittels Call-Befehl

Die Prozedur MeldungAufrufen können Sie einfach starten, indem Sie den Namen der Prozedur im Fenster DIREKTBEREICH eingeben. Das Fenster DIREKTBEREICH wird über den BefehlDIREKTFENSTER aus dem Menü ANSICHT aktiviert. Geben Sie hier den Namen MeldungAufrufen gefolgt von Ü ein. Die Prozedur wird dann sofort gestartet.

Nach erfolgreichem Start erscheint Ihr Word-Dokument inklusive Meldungsfenster auf dem Bildschirm. Beim Öffnen des Meldungsfensters sowie beim Schließen wird jeweils ein Piepton ausgegeben. Dies geschieht über den Befehl Beep. Das Meldungsfenster wird über die Schaltfläche OK geschlossen.

Gültigkeitsbereich von Prozeduren

Vielleicht ist Ihnen bei der Prozedur MeldungAusgeben aufgefallen, daß hier das Schlüsselwort Public vor dem Schlüsselwort Sub angeführt ist. Wie der Name Public schon vermuten läßt, sind Prozeduren die als solches gekennzeichnet sind öffentlich. Diese Prozeduren können von jedem anderen Modul Ihres Visual Basic for Applications-Programms aufgerufen werden. Komplexe Programme bestehen normalerweise aus mehreren Modulen. Diese wiederum aus mehreren Prozeduren und Funktionen.

Innerhalb eines Moduls gibt es neben den öffentlichen auch private Funktionen oder Prozeduren. Diese werden dann mit dem Schlüsselwort Private gekennzeichnet. Eine derartige Prozedur oder Funktion kann dann nur innerhalb des Moduls aufgerufen werden.

Soweit ist die Sache klar. Was geschieht aber, wenn Sie innerhalb von verschiedenen Modulen mehrmals den gleichen Namen für eine Prozedur oder Funktion vergeben? Hier sind nun die folgenden drei Fälle zu unterscheiden.

1.     Die Prozeduren in den Modulen A und B sind innerhalb ihrer Module als Private gekennzeichnet. Der Aufruf von Beispielprozedur in Modul A führt die entsprechende Prozedur von Modul A aus. Gleiches gilt für die Modul B und den Aufruf dort.

2.     Die Prozedur in Modul A ist Private, die Prozedur in Modul B aber Public. Für den Aufruf der Prozedur innerhalb von Modul A und B gilt wieder der erste Fall. Wird aber im dritten Modul – Modul C – ein Aufruf der Beispielprozedur durchgeführt, kann für eine korrekte Erfüllung dieses Aufrufs nur die Prozedur aus Modul B in Frage kommen, da diese als einzige Prozedur mit dem angegebenen Namen öffentlich zugänglich ist. So wird es auch tatsächlich von Visual Basic for Applications durchgeführt.

3.     In beiden Modulen ist die Prozedur als Public gekennzeichnet. Für den Aufruf der Prozedur innerhalb von Modul A und B gilt auch hier wieder der erste Fall. Wird aber im Modul C ein Aufruf derBeispielprozedur durchgeführt, hat Visual Basic for Applications das Problem, welche der beiden Prozeduren es nehmen soll. Die Folge ist eine Fehlermeldung schon während der Kompilierung.

Es läßt sich nicht immer vermeiden, daß Prozeduren oder Funktionen den gleichen Namen bekommen. Damit aber kein Namenskonflikt auftritt, muß man beim Aufruf lediglich den Modulnamen angeben in dem sich die Prozedur befindet. Auf unser drittes Beispiel bezogen sieht die Syntax für einen derartigen Aufruf dann folgendermaßen aus:

Call [Modul A].BspProzedur

Sie können auf die Angabe der eckigen Klammern verzichten, sofern der Modulname keine Leer- oder Sonderzeichen enthält.

Kommentar schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.