Steuerelement-Wizards programmieren

Access bietet im Formular- und Berichtsentwurf die Möglichkeit, Steuerelemente mithilfe von Steuerelement-Assistenten zu erstellen. Das ist für Einsteiger eine Erleichterung, führt aber auch dazu, dass sie schnell Ergebnisse erzielen, deren Zustandekommen sie anschließend nicht mehr nachvollziehen können. Sie helfen nicht, die zum Anlegen von Steuerelementen und ihren Funktionen nötigen Schritte zu verstehen. Wenn man jedoch genau weiß, wie man Steuerelemente erstellt und programmiert, gelangt man schnell zu dem Punkt, dass man die gleichen Schritte immer wieder manuell durchführen muss. Und hier kommt ein spannendes Feature von Microsoft Access ins Spiel: Wir können auch selbst Steuerelement-Wizards programmieren, mit denen wir Steuerelemente genau nach unseren Wünschen anlegen können. Dabei sparen wir wertvolle Zeit, weil wir diese so gestalten können, dass nur noch wenige Eingaben nötig sind, um die gewünschten Steuerelemente zu erhalten. In diesem Beitrag zeigen wir, welche Steuerelement-Assistenten es schon gibt und wie wir eigene grundsätzlich hinzufügen können.

Steuerelement-Wizards in Access nutzen

Wenn wir mit einer frisch installierten Access-Anwendung arbeiten, werden die Steuerelement-Assistenten, soweit verfügbar, automatisch gestartet. Dazu müssen wir lediglich ein entsprechendes Steuerelement anlegen. Die meisten professionellen Entwickler haben dieses Feature jedoch deaktiviert, da sie die Assistenten ohnehin nicht nutzen.

Wenn wir jedoch eigene Steuerelement-Wizards programmieren und nutzen wollen, müssen wir diese Funktion zunächst wieder aktivieren. Das gelingt, indem wir im Formular- oder Berichtsentwurf (im Folgenden werden wir uns auf den Formularentwurf beschränken) im Ribbon die Option Steuerelement-Assistenten verwenden aktivieren (siehe Bild 1).

Aktivieren der Steuerelement-Wizards

Bild 1: Aktivieren der Steuerelement-Wizards

Wenn wir dann in der Toolbox auf eines der Steuerelemente klicken, für das ein eingebauter Assistent bereitsteht, wird dieser beim Hinzufügen des Steuerelements angezeigt. So etwa der Assistent, der beim Hinzufügen einer Schaltfläche aufgerufen wird (siehe Bild 2).

Der eingebaute Schaltflächen-Wizard von Access

Bild 2: Der eingebaute Schaltflächen-Wizard von Access

Diese ist allerdings für einen professionellen Access-Entwickler nicht hilfreich, da er zum Beispiel keinen VBA-Code zum Ausführen erzeugt, sondern die Funktion in einem Makro hinterlegt.

Interessant sind zum Beispiel die Wizards für Kombinations- und Listenfelder. Starten wir diese durch Anlegen eines dieser Steuerelemente, finden wir einen Assistenten vor, der ähnliche Schritte anbietet wie der Assistent zum Erstellen von Nachschlagefeldern in Tabellen.

Steuerelement-Wizards in der Registry

Ob ein Steuerelement-Wizard zur Verfügung steht, sehen wir in Access erst, wenn wir eines der Steuerelemente anlegen. Dann erscheint der Wizard, falls vorhanden, andernfalls wird das Steuerelement einfach zum Formularentwurf hinzugefügt.

Für welche Steuerelemente es eingebaute Wizards gibt, können wir in der Registry nachsehen. Diese befinden sich zum Beispiel für ein 32-Bit-Office unter dem folgenden Pfad:

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access\Wizards\Control Wizards\

Hier sehen wir die verschiedenen Steuerelementtypen und darunter die dafür zur Verfügung stehenden Wizards (siehe Bild 3). Es gibt nur für wenige Steuerelemente solche Assistenten und alle haben nur ein eingebautes Exemplar.

Steuerelement-Wizards in der Registry

Bild 3: Steuerelement-Wizards in der Registry

Dadurch werden die Steuerelement-Assistenten auch direkt angezeigt, wenn wir das betreffende Steuerelement anlegen.

Gibt es mehr als einen Wizard, weil wir beispielsweise selbst einen hinzugefügt haben, erscheint der Dialog Generator auswählen aus Bild 4, der alle verfügbaren Wizards anzeigt.

Mehrere Wizards für einen Steuerelementtyp

Bild 4: Mehrere Wizards für einen Steuerelementtyp

Eigenen Steuerelement-Wizard erstellen

Um einen benutzerdefinierten Steuerelement-Wizard zu erstellen, benötigen wir zunächst eine eigene Datenbank, die den Wizard enthält. Wir können über eine solche Datenbank allerdings auch mehrere Wizards gleichzeitig zur Verfügung stellen.

Diese Datenbank muss die Dateiendung .accda statt .accdb aufweisen, was wir durch Umbenennen erreichen.

Außerdem muss die Datenbank eine Tabelle namens USysRegInfo erhalten, welche die Informationen enthält, die beim Installieren des Wizards in die Registry übertragen werden sollen.

Diese Tabelle enthält Informationen wie die, die wir bereits weiter oben im Screenshot der Registry abgebildet haben.

Für einen Steuerelement-Wizard benötigen wir darin die folgenden Informationen:

  • Function: Gibt die VBA-Funktion an, die beim Aufrufen des Wizards aufgerufen werden soll. Diese öffnet dann etwa ein Formular, über das wir die spezifischen Eigenschaften für das zu erstellende Steuerelement eingeben. Die Funktion muss ein spezielles Format aufweisen.
  • Library: Enthält den Pfad zu der .accda-Datei mit den Funktionen des Wizards.
  • Description: Hier können wir eine Beschreibung hinterlegen. Diese muss mit Bedacht gewählt werden, denn sie taucht in dem Dialog auf, der erscheint, wenn es mehrere Wizards für ein Steuerelement gibt. Man kann daher hier auch einfach den Namen des Wizards angeben und gegebenenfalls eine kurze Erläuterung.
  • Can Edit: Gibt an, ob der Wizard bestehende Steuerelemente editieren kann (Wert 1) oder ob er nur zum Anlegen neuer Steuerelemente zur Verfügung steht (Wert 0).

Diese Werte hinterlegen wir in der bereits erwähnten Tabelle USysRegInfo. Am einfachsten übernehmen Sie diese aus der Beispieldatenbank. Das ist sogar zu empfehlen, da bereits kleinste Fehler dazu führen, dass der Wizard nicht installiert werden kann. Ich habe einmal mehrere Stunden damit verbracht, einen solchen Fehler zu finden – am Ende lag es daran, dass ich statt Can Edit den Wert CanEdit (zusammengeschrieben) verwendet habe. Den Entwurf der Tabelle USysRegInfo sehen Sie in Bild 5.

Die Tabelle USysRegInfo in der Entwurfsansicht

Bild 5: Die Tabelle USysRegInfo in der Entwurfsansicht

Achtung: Wenn Sie die Tabelle anlegen oder importieren, ist diese normalerweise nicht zu sehen. Das liegt an dem Präfix USys. Diese Tabellen werden standardmäßig ausgeblendet und erscheinen erst, wenn wir in den Optionen des Navigationsbereichs die Eigenschaft Systemobjekte anzeigen aktivieren.

Für einen einfachen Button-Wizard tragen wir die Werte aus Bild 6 in diese Tabelle ein. Der erste Eintrag, dessen Felder ValName und Value leer sind, dient lediglich dazu, den Schlüssel wie in Subkey angegeben zur Registry hinzuzufügen. Die übrigen Einträge legen die Name-Wert-Paare unter diesem Schlüssel an.

Die Tabelle USysRegInfo mit den Daten für einen Button-Wizard

Bild 6: Die Tabelle USysRegInfo mit den Daten für einen Button-Wizard

Das Feld Subkey nimmt den Pfad auf, unter dem wir den Eintrag in der Registry erstellen wollen. Er lautet in diesem Fall:

HKEY_CURRENT_ACCESS_PROFILE\Wizards\Control Wizards\CommandButton\ButtonWizard

Hier verwenden wir mit HKEY_CURRENT_ACCESS_PROFILE einen Platzhalter, der beim Installieren des Add-Ins automatisch durch den entsprechenden Zweig der Registry ersetzt wird. Dann folgt der Schlüssel Wizards, der alle Assistenten für verschiedene Elemente enthält. Der nächste Schlüssel Control Wizards gibt an, dass es sich bei dem Assistenten um einen Steuerelement-Assistenten handelt. Anschließend geben wir den Typ des Steuerelements an, für den wir den Assistenten aufrufen wollen, in diesem Fall CommandButton. Es gibt unter anderem die folgenden Typen:

Label, TextBox, OptionGroup, ToggleButton, OptionButton, CheckBox, ComboBox, ListBox, CommandButton, Image, UnboundObjectFrame, BoundObjectFrame, PageBreak, SubformSubreport, Line und Rectangle

Diese Bezeichnungen müssen ebenfalls exakt übernommen werden. Schließlich folgt der Name des Assistenten.

Der Wert im Feld Subkey muss für alle Angaben, die zu diesem Wizard in die Registry eingetragen werden sollen, exakt gleich sein.

Das Feld Type enthält den Typ des Registry-Eintrags. Er kann die folgenden Werte annehmen:

  • 0: Zeigt an, dass ein Schlüssel angelegt werden soll.
  • 1: Legt fest, dass ein Eintrag des Typs REG_SZ angelegt wird.
  • 4: Legt fest, dass ein Eintrag des Typs REG_DWORD angelegt wird.

Unter ValName geben wir den Namen des Name-Wert-Paares für den Eintrag an.

Und Value enthält schließlich den Wert. Hier verwenden wir für Library wiederum einen Platzhalter:

|ACCDIR

Dieser wird beim Installieren durch den Add-In-Ordner von Windows ersetzt, in den die Wizard-Datenbank beim Installieren kopiert wird. Dahinter müssen ein Backslash und der Name der Wizard-Datenbank folgen.

Funktion zum Starten des Wizards

Damit der Wizard gestartet werden kann, geben wir unter Function den Namen der VBA-Funktion an, die beim Starten ausgelöst werden soll.

Diese muss für die Verwendung in einem Steuerelement-Wizard ohne führendes Gleichheitszeichen und ohne folgendes Klammernpaar angegeben werden. In unserem Fall lautet der Eintrag Autostart_ButtonWizard.

Die dazu anzulegende VBA-Funktion muss ein bestimmtes Format aufweisen, da beim Aufrufen eines Steuerelement-Wizards zwei wichtige Informationen übergeben werden:

  • Der Name des Steuerelements. Beim Anlegen eines neuen Steuerelements ist das der von Access vergebene Name, beim Editieren eines vorhandenen Steuerelements der gegebenenfalls bereits vom Benutzer geänderte Name.
  • Der Name des Bezeichnungsfeldes des Steuerelements, soweit vorhanden. Steuerelemente mit dem Typ TextBox, ListBox oder ComboBox werden standardmäßig mit einem Bezeichnungsfeld angelegt, dessen Name hier übergeben wird.

Die Signatur der Funktion muss wie folgt aussehen:

Public Function Autostart_ButtonWizard( _
    Optional strControl As String, _
    Optional strLabel As String) As Variant
End Function

Zu Beispielzwecken füllen wir diese wie folgt:

Public Function Autostart_ButtonWizard( _
        Optional strControl As String, _
        Optional strLabel As String) As Variant
    Dim strMessage As String
    On Error GoTo Fehler
    strMessage = "Control-Wizard für ''" & strControl & "''"
    If Not Len(strLabel) = 0 Then
        strMessage = strMessage & vbCrLf _
            & "mit Bezeichnungfeld ''" & strLabel & "''"
    End If
    MsgBox strMessage, vbOKOnly + vbInformation, _
        "Button-Wizard"
Ende:
    Exit Function
Fehler:
    MsgBox Err.Number & " " & Err.Description
End Function

Wir wollen also einfach eine Meldung mit dem Namen des Steuerelements und gegebenenfalls dem Namen des Bezeichnungsfeldes ausgeben.

Eigenschaften der Wizard-Datenbank festlegen

Damit sind wir fast fertig. Es fehlen allerdings noch einige wichtige Einstellungen. Diese nehmen wir in den Eigenschaften der Access-Datenbank vor, die wir finden, indem wir zum Ribbon-Reiter Datei wechseln und dann auf Informationen klicken. Hier finden wir rechts den Link Datenbankeigenschaften anzeigen und bearbeiten. Betätigen wir den Link, erscheint der Eigenschaften-Dialog zu dieser Datenbank. Hier füllen wir folgende Eigenschaften:

  • Titel: Erscheint im Add-In-Manager unter Verfügbare Add-Ins
  • Firma: Erscheint im Add-In-Manager beim Markieren des Add-Ins im unteren Bereich.
  • Kommentare: Erscheint im Add-In-Manager beim Markieren des Add-Ins im unteren Bereich.

Unsere Einstellungen sehen Sie in Bild 7.

Eigenschaften der Wizard-Datenbank

Bild 7: Eigenschaften der Wizard-Datenbank

Wizard installieren

Zum Installieren des Wizards muss nach unseren Experimenten Access zunächst im Administrator-Modus gestartet werden. Dann öffnen wir eine beliebige Datenbank und rufen über das Ribbon den Add-In-Manager auf (Datenbanktools|Add-Ins|Add-Ins|Add-In-Manager).

Der Add-In-Manager sieht wie in Bild 8 aus, wenn noch keine Add-Ins installiert sind. Hier klicken wir auf die Schaltfläche Neues hinzufügen… und wählen die .accda-Datei mit unserem Steuerelement-Wizard aus. Anschließend erscheint der neue Eintrag wie in Bild 9. Hier sehen wir nun die Einstellungen, die wir in den Datenbank-Eigenschaften vorgenommen haben.

Der jungfräuliche Add-In-Manager

Bild 8: Der jungfräuliche Add-In-Manager

Der Add-In-Manager mit dem neu installierten Wizard

Bild 9: Der Add-In-Manager mit dem neu installierten Wizard

Aufrufen des Steuerelement-Wizards

Um den Steuerelement-Wizard aufzurufen, legen wir ein Formular in der Entwurfsansicht an. Klicken wir in der Toolbox auf die Schaltfläche und dann ins Formular, erscheint der Dialog Generator auswählen und zeigt neben dem eingebauten Assistenten Befehlsschaltflächen-Assistent auch unseren neuen Assistenten an (siehe Bild 10).

Unser Wizard im Auswahl-Dialog

Bild 10: Unser Wizard im Auswahl-Dialog

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