Die Ausgangslage
In Ihrem VBA-Code lagern Sie häufig verwendete Aufgaben in Prozeduren aus. Diesen Prozeduren teilen Sie die notwendigen Informationen über Parameter mit. Hierin liegt das Problem.
Es stellen sich folgende Fragen:
- Welche Werte können für einen Parameter übergeben werden
- Welcher Wert hat welche Bedeutung
Wenn Sie die Funktion gerade erst geschrieben haben, sind diese Fragen noch sehr leicht zu beantworten. Die Antworten haben Sie noch im Kopf. Wenn die Erstellung der Funktion aber schon etwas zurück liegt und Ihre Erinnerung dementsprechend verblasst ist, können Sie diese Fragen nur beantworten, wenn Sie einen Blick in den VBA-Code der Funktion werfen. Dort finden Sie dann (hoffentlich) einen ausführlichen Kommentar, der Ihnen die Wirkung der einzelnen Werte erläutert.
Welchen Weg geht Access
Es ist aufwändig und gegebenenfalls auch fehleranfällig, auf diesem Weg an die Informationen über Parameter zu gelangen. Spätestens jetzt werden Sie neidisch auf die in Access und VBA eingebauten Funktionen schauen. Wenn Sie eine solche Funktion eintippen, zeigt Ihnen der VBA-Editor mittels IntelliSense häufig eine Liste der möglichen Werte für einen Parameter an (siehe Bild 1).
Bild 1: IntelliSense zeigt die möglichen Werte für einen Parameter an.
An dieser Stelle stellen Sie sich vielleicht folgende Fragen:
- Wie macht der VBA-Editor das
- Kann ich dieses Verhalten auch für meine selbst geschriebenen Prozeduren herbeiführen
Die Lösung liegt in der Antwort auf die erste Frage. Der VBA-Editor verwendet für die Realisierung dieser Funktionalität Aufzählungstypen, so genannte Enumerationen. Genau das ist auch die Lösung für Ihr Problem: verwenden Sie eine Enumeration.
Im ersten Schritt erstellen Sie eine Enumeration für die möglichen Elemente, die als Parameterwert übergeben werden können. Im zweiten Schritt deklarieren Sie dann den Parameter in Ihrer Funktion vom Typ Ihrer soeben definierten Enumeration.
Eine Enumeration erstellen …
Eine Enumeration ist schnell erstellt:
Public Enum fwcFarbWert fwcRot = 1 fwcGrün = 2 fwcBlau = 3 End Enum
… und verwenden
Die so definierte Enumeration können Sie jetzt bei der Deklaration Ihrer Funktion einem Parameter als Datentyp zuweisen.
Private Sub FarbeZuweisen(Farbe As fwcFarbWert) Dim lngFarbe As Long lngFarbe = Farbe ''... End Sub
Wenn Sie jetzt einen Aufruf der Prozedur FarbeZuweisen in das Direktfenster eintippen, erhalten Sie IntelliSense-Unterstützung (siehe Bild 2).
Bild 2: IntelliSense bei einer selbst definierten Funktion
Namensregeln für Enumerationen
Um den Namen für eine Enumeration festzulegen, suchen Sie einen Begriff, der den Inhalt Ihrer Aufzählung möglichst genau beschreibt. Für den Namen bietet es sich an, die Einzahl dieses Begriffs zu verwenden.
Die Enumeration zählt zwar eine Mehrzahl gleichartiger Elemente auf. Wenn Sie Ihre Enumeration aber später im Code verwenden, brauchen Sie nur einen Wert aus Ihrer Aufzählung. Das ist der Grund, warum der Name der Enumeration aus der Einzahl des Begriffs besteht.
Gemäß den RVBA Naming Conventions [2] stellen Sie dem Namen der Enumeration und den einzelnen Elementen einen Präfix voran. Dieses Präfix soll einen Rückschluss auf den Namen der Enumeration zulassen und wird um den Buchstaben c ergänzt. Wenn die Enumeration etwa den Namen UserTyp hat, dann bietet sich als Präfix die Zeichenfolge utc an.
Durch das Präfix im Namen der Elemente einer Enumeration wird beim späteren Lesen des VBA-Codes schneller deutlich, um was für ein Element es sich handelt.
Welchen Datentyp haben Enumerationen
Den Elementen einer Enumeration können Sie – im Unterschied zu anderen Konstanten – nur Werte vom Datentyp Long zuweisen. Alle anderen Datentypen können nicht verwendet werden.
Wenn Sie den einzelnen Elementen einer Enumeration nicht ausdrücklich einen Wert zuweisen, werden die Einträge beginnend bei 0 intern automatisch durchnummeriert. Im folgenden Beispiel hat das Element utcUser beispielsweise den Wert 1.
Public Enum utcUserTyp utcGast utcUser utcAdmin End Enum
Die Werte müssen den Elementen nicht fortlaufend zugewiesen werden. Sie können beliebige Werte verwenden oder auch auslassen. Wenn Sie einem einzelnen Element keinen Wert zuweisen, wird der letzte verwendete Wert um eins erhöht zugewiesen. In diesem Beispiel weist der Eintrag macSilke den Wert 6 auf (siehe Bild 3):
Public Enum macMitarbeiter macThomas = 1 macAndre = 5 macSilke macMartin = 8 End Enum
Bild 3: Der Wert des Elements macSilke
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