Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2007.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Durch die Verwendung von Enumerationen erhalten benutzerdefinierte Funktionen bessere Unterstützung durch IntelliSense.

Techniken

VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

IntelliSenseMitEnumerationen.mdb

Shortlink

482

IntelliSense mit Enumerationen

Thomas Möller, Weinstadt

Wenn Sie im VBA-Editor eine Funktion aufrufen, die Ihnen von VBA oder Access bereitgestellt wird, dann werden Sie bei der Auswahl der möglichen Werte für einen Parameter mit IntelliSense unterstützt. Der VBA-Editor verwendet so genannte Enumerationen, um dieses Feature zu ermöglichen. Dieser Artikel erläutert die Grundlagen zu Enumerationen und zeigt, wie Sie Ihre selbst geschriebenen Prozeduren ebenfalls mit IntelliSense ausstatten können.

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 (s. Abb. 1).

Abb1.tif

Abb. 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 (s. Abb. 2).

Abb2.tif

Abb. 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 (s. Abb. 3):

Public Enum macMitarbeiter

     macThomas = 1

     macAndre = 5

     macSilke

     macMartin = 8

End Enum

Abb4.tif

Abb. 3: Der Wert des Elements macSilke

Geltungsbereich/Scope

Wie alle Objekte in VBA können Sie auch bei Enumerationen den Geltungsbereich als Private oder Public deklarieren. Wenn Sie auf das Schlüsselwort für den Geltungsbereich verzichten, werden Enumerationen standardmäßig als Public deklariert. Im Gegensatz zu Konstanten können Sie Enumerationen im VBA-Code von Formularen, Berichten und allen anderen Klassenmodulen auch als Public deklarieren. Eine solche Enumeration und ihre Elemente stehen Ihnen auch dann zur Verfügung, wenn das Objekt, das die Enumeration enthält, nicht geöffnet ist. Wenn Sie im Aufruf einer Prozedur einen Parameter vom Typ einer Enumeration deklariert haben, muss die Enumeration mindestens denselben Geltungsbereich haben wie die Prozedur. Ansonsten lässt sich der VBA-Code nicht kompilieren.

Vorhandene Enumerationen verwenden

Wenn Sie eine Prozedur schreiben, werden Sie vielleicht in die Situation kommen, dass Sie einen Parameter verwenden, den es in dieser Form schon in Access beziehungsweise VBA gibt. Jetzt können Sie entweder eine eigene Enumeration erstellen oder Sie verwenden die bereits vorhandene Enumeration.

Den Namen einer bestehenden Enumeration können Sie mit Hilfe des Objektkatalogs ermitteln. Starten Sie dazu aus dem VBA-Editor den Objektkatalog mit F2. Geben Sie jetzt den Namen eines Elements der gesuchten Enumeration in die Suche ein und klicken Sie auf die Schaltfläche mit dem Fernglas.

Als Nächstes wählen Sie aus der Liste der Suchergebnisse den passenden Eintrag aus. Im unteren Teil ist jetzt der Name der Enumeration markiert (s. Abb. 4). Im Fenster daneben können Sie alle Elemente der ausgewählten Enumeration sehen.

Abb5.tif

Abb. 4: Eine Enumeration im Objektkatalog suchen

Vorteile von Enumerationen

Die Verwendung einer Enumeration für einen Parameter einer Prozedur bringt folgende Vorteile:

  • Der VBA-Editor zeigt Ihnen per IntelliSense die Liste der möglichen Werte an.
  • Bei entsprechender Benennung der Parameter ist klar, welcher Wert welche Bedeutung hat.
  • Sie können nur Werte aus der Enumeration auswählen. Wenn Sie versehentlich einen anderen Wert eintragen, können Sie Ihren Code nicht kompilieren.

Schleifen mit Enumerationen

Mit etwas Vorbereitung können Sie Enumerationen auch als Grenzwerte für einen Schleifendurchlauf verwenden. Dazu müssen Sie den Elementen Ihrer Enumeration lückenlos aufeinander folgende Werte zuweisen:

Private Enum macMitarbeiter

     macFirst = 1

     macThomas = 1

     macSilke = 2

     macAndre = 3

     macLast = 3

End Enum

Sie sehen bereits die beiden zusätzlich eingefügten Elemente macFirst und macLast. Mit Hilfe dieser beiden Elemente sind Sie in der Lage, eine For Next-Schleife wie im Folgenden zu erstellen:

For i = macFirst to macLast

     'Hier steht genialer Code

Next i

Der Vorteil dieser Vorgehensweise liegt auf der Hand. Wenn Sie neue Elemente zur Enumeration hinzufügen, brauchen Sie nur das Element macLast anzupassen. Eine weitere Durchsicht Ihres VBA-Codes ist nicht notwendig.

API-Funktionen und Enumerationen

Windows legt eine Vielzahl von APIs offen. Das Internet ist voll von Beschreibungen. Häufig sind den API-Funktionen Parameter zu übergeben. Damit die Werte für die zu übergebenden Parameter besser verständlich sind, werden dafür Konstanten mit aussagekräftigen Namen deklariert. Schauen Sie sich beispielsweise die Beschreibung der ShowWindow-Funktion [2] an.

Leider werden die Möglichkeiten von VBA nur zur Hälfte genutzt. Mit der Deklaration der Konstanten stehen aussagekräftige Namen zur Verfügung. Aber wer kann sich die Namen solcher Konstanten dauerhaft merken? Es bleibt also wieder nur der Blick in den VBA-Code, um den Namen der richtigen Konstante zu ermitteln. Die bessere Lösung wäre, statt der vielen Konstanten eine Enumeration zu deklarieren und diese bei der Deklaration der API-Funktion zu verwenden. Auf diesem Weg bekommen Sie auch für API-Funktionen IntelliSense-Unterstützung im VBA-Editor (s. Abb. 5).

Abb6.tif

Abb. 5: IntelliSense für API-Funktionen

Zusammenfassung

Sie wissen jetzt, was Enumerationen sind und wie Sie sie verwenden können. Nutzen Sie die Möglichkeiten, die sich daraus ergeben. Wenn Sie bei der Benennung Ihrer Enumerationen den Namensregeln folgen, werden Sie auch später noch durch aussagekräftigen und lesbaren Code belohnt. Leider werden Enumerationen viel zu selten eingesetzt. Wann schreiben Sie Ihre erste?

Quellen

[1] RVBA Naming Conventions: http://www.xoc.net/standards/rvbanc.asp

[2] Beschreibung der API-Funktion ShowWindow: http://www.vbarchiv.net/vbapi/ShowWindow.php

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

IntellisenseMitEumerationen.mdb

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.