Wenn Sie ein Modul oder ein Klassenmodul angelegt haben, sehen Sie eigentlich erst nur ein leeres Fenster für den Code. Um aber überhaupt Code ausführen zu können brauchen Sie entweder Prozeduren oder Funktionen.
Wie bereits bei den Variablen geschrieben, steht ganz oben in einem Modul immer der Deklarationsteil, in demalle benötigten Variablen deklariert werden. Die Zeile Option Explicit sorgt dafür, daß Sie die eine Deklaration der Variablen nicht vergessen.
Eine Prozedur erstellen Sie z.B. ganz einfach mit der Zeile Sub MeineProzedur()
Grundsätzlich gilt im Codefenster: Schlüsselwörter müssen Sie nicht mit Großbuchstaben schreiben. Im Gegenteil, schreiben Sie alle Buchstaben klein, und die Schlüsselwörter werden automatisch von VBA groß geschrieben. Erfolgt keine Änderung in Großschreibung, sehen Sie sofort, daß Sie einen Fehler gemacht haben. Das gilt auch für Variablen. Nur in der Deklaration müssen Sie Großbuchstaben benutzen. Wie schon oben geschrieben, sollten Sie im Code alles klein schreiben, es wird beim Zeilenwechsel automatisch geprüft und umgeschrieben.
Immer wenn Sie die Zeile wechseln, wird diese auf die richtige Syntax überprüft, und Fehler werden sofort angezeigt. Dazu müssen aber die Standardoptionen aktiviert sein. Ignorieren Sie die angezeigten Fehler, wird die gesamte Zeile in roter Schrift markiert.
Der Name der Prozerdur ist frei wählbar mit den üblichen Einschänkungen für Benennungen.
Wenn Sie die erste Zeile geschrieben haben und Return drücken, wird automatisch eine weitere Zeile darunter ezeugt: End Sub. Alles was jetzt zwischen diese Zeilen geschrieben wird, ist der Code zu dieser Prozedur.
Hier ein einfaches Beispiel für eine Prozedur:
Prozeduren arbeiten also den enthaltenen Code ab. Sie können Prozeduren von jeder Stelle im Code aufrufen. Wenn die Prozedur im selben Modul ist, reicht der Code wie oben beschrieben.
Soll eine Prozedur aus einem anderen Modul aufgerufen werden, muss die erste Zeile entsprechend erweitert werden. Da helfen - wie bei den Variablen - die Schlüsselwörter Private und Public weiter:
Der Aufruf selbst ist in den Zeilen 25 - 31, der Aufruf ist hier im selben Modul. Es werden beide Prozeduren ausgeführt. Wird der Aufruf in ein anderes Modul kopiert und dort aufgerufen, wird es bei der Zeile 27 eine Fehlermeldung geben, da die Prozedur nicht in dem eigenene Modul gefunden wird, Zeile 29 dagegen wird ausgeführt.
Prozeduren können aber noch mehr. Sie können an Prozeduren Variablen aus dem aufrufenden Teil übergeben, die dort dann weiter verarbeitet werden. Hier ein Beispiel für eine einfache mathematische Berechnung:
In diesem Beispiel wird der Wert beim Aufruf an die Prozedur übergeben und damit dann weitergerechnet. Wie Sie sehen, hat sich die Zeile 17 - die Prozedur Berechnung - ein wenig verändert. In den Klammern steht die Variable, die die Prozedur verarbeiten soll. Das Schlüsselwort ByVal sollte dabei immer verwendet werden. In Codes, in denen dieses Schlüsselwort weggelassen wurde, nimmt VBA den Standard. Sie sollten aber trotzdem unbedingt immer das Schlüsselwort nennen.
Schlüsselwort |
Beschreibung |
ByVal |
es wird ein Argument als Wert übergeben |
ByRef |
es wird ein Wert als Referenz übergeben (Standardwert) |
Optional |
es muss kein Wert übergeben werden. Wenn das Schlüsselwort Optional benutzt wurde, dürfen danach auch nur Argumente mit dem Schlüsselwort Optional benutzt werden. |
Nach der Berechnung wird das Ergebnis in der privaten Variable Ergebnis gespeichert und in der Prozedur Aufruf ausgegeben.
Bei dem Beispiel ist es unbedingt notwendig, einen Wert für die Grundzahl mit zu übergeben. Es kann aber auch vorkommen, dass es zwar Werte geben kann - aber es nicht unbedingt notwendig ist. Hierzu ein weiteres Beispiel:
In obigem Beispiel wird in Zeile 9 kein Wert übergeben. Trotzdem funktioniert der Aufruf. Die Variable ist hier nicht leer sondern enthält ohne eine andere Zuweisung den Wert 0. Daher ist hier auch nicht zwingend eine Fehlerroutine nötig. Sonst müssen Sie sicherstellen, dass die leere Variable Grundzahl auch in der Prozedur verarbeitet werden kann.
Prozeduren stoßen jetzt aber an ihre Grenzen. Es ist nicht möglich, einen Wert zu übergeben und mit der Prozedur einen neuen Wert an den aufrufenden Codeteil zurückzugeben. Das ist nur mit Funktionen möglich.