IntelliSense mit Enumerationen

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).

Abb1.tif

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).

Abb2.tif

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
Abb4.tif

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

Schreibe einen Kommentar