Wer VBA-Code schreibt, merkt schnell: Bestimmte Abläufe wiederholen sich. Man prüft an drei verschiedenen Stellen, ob ein Textfeld leer ist. Man berechnet denselben Wert an zwei verschiedenen Stellen. Man kopiert Code – und wenn sich etwas ändert, muss man es an drei Stellen korrigieren, und vergisst garantiert eine. Die Lösung dafür sind eigene Prozeduren und Funktionen: wiederverwendbare Codebausteine, die man einmal schreibt und beliebig oft aufruft. In diesem Artikel zeigen wir, wie man sie erstellt, wie man Werte übergibt und zurückbekommt und wie man Code damit sauber strukturiert.
Sub und Function – der Unterschied
In VBA gibt es zwei Arten von Codebausteinen: Sub und Function. Der Unterschied ist einfach: Eine Sub-Prozedur führt etwas aus und gibt keinen Wert zurück.
Eine Function tut dasselbe, liefert aber am Ende einen Rückgabewert. Wann man welches nimmt, ergibt sich meist von selbst: Soll Code etwas tun – ein Formular öffnen, Daten speichern, eine Meldung anzeigen -, ist Sub richtig.
Soll Code etwas berechnen oder prüfen und das Ergebnis zurückliefern, ist Function richtig.
Ein häufiger Anfängerfehler ist es, eine Function zu schreiben, aber nie einen Rückgabewert zuzuweisen – die Funktion verhält sich dann wie eine Sub und gibt immer den Standardwert des deklarierten Rückgabetyps zurück.
Wenn man keinen Rückgabewert braucht, sollte man von vornherein Sub verwenden.
Eine Sub-Prozedur erstellen
Eine Sub-Prozedur wird mit dem Schlüsselwort Sub eingeleitet, gefolgt vom Namen und einem Klammerpaar. Bei der Deklaration sind die Klammern immer erforderlich, auch wenn die Prozedur keine Parameter entgegennimmt. Abgeschlossen wird sie mit End Sub:
Public Sub MeldungAusgeben() MsgBox "Hallo Welt!" End Sub
Das Schlüsselwort Public bedeutet, dass die Prozedur aus anderen Modulen heraus aufgerufen werden kann. Die Alternative ist Private – dann ist die Prozedur nur innerhalb des eigenen Moduls sichtbar.
Fehlt das Schlüsselwort ganz, hängt das Verhalten vom Modultyp ab: In einem Standardmodul gilt dann Public, in einem Klassenmodul hingegen Private.
Als Faustregel gilt deshalb: Immer explizit angeben, was man meint. Hilfsprozeduren, die nur intern gebraucht werden, macht man Private.
Prozeduren, die von außen aufgerufen werden sollen, macht man Public.
Aufgerufen wird eine Prozedur einfach durch ihren Namen:
MeldungAusgeben
'oder mit dem Schlüsselwort Call:
Call MeldungAusgeben
Das Schlüsselwort Call wird heute selten verwendet, ist aber weiterhin vollständig gültig. Der Aufruf ohne Call ist die üblichere Schreibweise.
Parameter übergeben
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo
![Access [basics]](https://access-basics.de/wp-content/uploads/2021/02/logo400.png)