Vielleicht kennen Sie die kleinen Helferlein, die beim Anklicken einer Eigenschaft eines Formulars oder Steuerelements in Form einer Schaltfläche mit drei Punkten (…) auftauchen und beim Anklicken Unterstützung für das Füllen der jeweiligen Eigenschaft präsentieren. Wenn wir schon Access-Add-Ins, Tabellen-, Abfrage-, Formular und Berichtsassistenten sowie Steuerelement-Assistenten programmieren können, warum dann nicht auch noch Eigenschaftsassistenten? In diesem Beitrag zeigen wir die Grundlagen für das Programmieren eines Assistenten, der beim Anklicken der genannten Schaltfläche erscheint und seine Hilfe anbietet.
Eingebaute Eigenschaftsassistenten
Beispiele für eingebaute Assistenten findet man schnell. Die Bild-Eigenschaft von Formularen oder Steuerelementen bietet die Schaltfläche mit den drei Punkten an, um die anzuzeigende Bilddatei auszuwählen.
Ein anderes Beispiel, das Sie in Bild 1 sehen, wird beim Anklicken der Eigenschaft Steuerelementinhalt aktiviert.
Bild 1: Starten eines Eigenschaftsassistenten
Dieses öffnet den Ausdrucks-Generator aus Bild 2, mit dem wir den Ausdruck für die entsprechende Eigenschaft aus verschiedenen Listen und Optionen zusammenklicken können.
Bild 2: Der Ausdrucks-Generator
Eigenschaftsassistent im Eigenbau
Wie aber bauen wir selbst einen solchen Assistenten? Dazu sind die folgenden Schritte nötig:
- Erstellen einer Access-Datenbank mit der Dateiendung .accda
- Hinzufügen einer Tabelle namens USysRegInfo, welche die Informationen über das Add-In zum Einfügen in die Registry enthält
- Hinzufügen einer VBA-Funktion, die beim Aufrufen des Add-Ins gestartet wird und welche beispielsweise die Benutzeroberfläche des Add-Ins anzeigt
- Programmieren der eigentlichen Funktion des Add-Ins inklusive Benutzeroberfläche
- Installieren des Add-Ins mit dem Add-In-Manager von Access
Aufgabe unseres Beispiel-Eigenschaftsassistenten
Damit der Beitrag nicht den Rahmen sprengt, wollen wir in diesem erst einmal einen rudimentären Eigenschaftsassistenten erstellen. Dieser soll ein einfaches Formular anzeigen, welches den Wert für das Add-In per Textfeld abfragt.
In einem weiteren Beitrag schauen wir uns ein konkretes und in der Praxis nutzbares Beispiel für einen Eigenschaftsassistenten an (siehe Ausblick am Ende des Beitrags).
Aufbau der Startfunktion des Assistenten
Die VBA-Funktion, die wir oben erwähnt haben, muss ein bestimmtes Format aufweisen.
Der Name der Funktion und der drei Parameter spielt keine Rolle, aber wir müssen drei String-Parameter deklarieren und die Funktion muss das Ergebnis des Assistenten als String zurückgeben.
Ein Beispiel für diese Funktion lautet:
Public Function Autostart(strObject As String, _ strControl As String, strCurVal As String) As String End Function
Die drei Parameter werden beim Aufrufen des Assistenten mit drei Werten gefüllt:
- strObject: Name des Objekts, also Formulars oder Berichts, für welches der Assistent aufgerufen wurde
- strControl: Name des Steuerelements, zu dem die Eigenschaft mit dem zu ermittelnden Wert gehört
- strCurVal: Aktueller Wert der Eigenschaft für das mit strObject und strControl angegebene Element
Aufbau des Formulars für die Benutzeroberfläche des Assistenten
Als Benutzeroberfläche werden Sie typischerweise ein Formular verwenden. Die wichtigste Information hierzu ist, dass Sie es mit der oben genannten Funktion aufrufen können und beim Schließen des Formulars den Wert für die Eigenschaft daraus auslesen müssen.
Dazu ist es erforderlich, dass das Formular als modaler Dialog geöffnet wird, also beispielsweise wie folgt:
DoCmd.OpenForm "frmAssistent", WindowMode:=acDialog
Auf diese Weise wird der aufrufende Code angehalten, wenn das Formular geöffnet wird. Nach der Eingabe der gewünschten Informationen wird der Benutzer das Formular dann beispielsweise über eine OK-Schaltfläche schließen, was das Formular aber nicht tatsächlich schließen, sondern nur ausblenden sollte.
Auf diese Weise läuft die Funktion, die das Formular geöffnet hat, nun weiter und kann den relevanten Wert einlesen und dann das Formular schließen.
Und die Vorgabe, dass das Formular als modaler Dialog geöffnet wird, hat noch einen anderen Hintergrund: Dadurch, dass der Benutzer so bis zum Schließen des Assistenten nicht auf die übrigen Elemente von Access zugreifen kann, wird sichergestellt, dass bei Schließen des Assistenten die Eigenschaft, die dieser aktualisieren soll, auch noch geöffnet ist.
Speichern der Assistenten-Informationen für die Registry
Access-Add-Ins und Assistenten werden in der Regel über den Add-In-Manager von Access installiert, den Sie über den Ribbonbefehl Datenbanktools|Add-Ins|Add-Ins|Add-In-Manager aufrufen können.
Hier wählen Sie dann die .accda-Datei des zu installierenden Add-Ins oder Assistenten aus.
Anschließend wertet der Add-In-Manager die Einträge in der Tabelle USysRegInfo aus und trägt diese an entsprechender Stelle in die Registry ein. Der Ort, wo diese Eintragungen vorgenommen werden, legt fest, um was für ein Add-In oder was für einen Assistenten es sich handelt, die Einträge selbst geben an, in welcher Datei sich die Funktionen befinden, ob ein Icon angezeigt werden soll, wie die Funktion zum Starten des Add-Ins oder Assistenten heißt und wie die Beschreibung des Tools lautet.
Der Ort für Eigenschaftsassistenten in der Registry heißt HKEY_CURRENT_USER\Software\MIcrosoft\Office\x.0\Access\Wizards\Property Wizards\[Name des Assistenten]. Darunter befinden sich Einträge mit den Registry-Werten für unseren Assistenten.
Mögliche Registry-Schlüssel
Für einen Eigenschaftsassistenten können wir die folgenden Schlüssel festlegen:
- Can Edit (DWORD): Gibt an, ob ein vorhandener Eigenschaftswert geändert werden soll. Wird üblicherweise auf 1 eingestellt.
- Description (String): Beschreibung des Assistenten, die nur dann angezeigt wird, wenn mehrere Add-Ins für eine Eigenschaft vorliegen und dazu der Auswahldialog geöffnet wird.
- Function (String): Name der aufzurufenden VBA-Funktion, in unserem Fall Autostart, ohne Gleichheitszeichen oder Klammern.
- Library (String): Pfad zur .accda-Datei mit den Funktionen des Eigenschaftsassistenten.
Aufbau der Tabelle USysRegInfo
[
Die Tabelle mit den Informationen für die Registry muss den Namen USysRegInfo erhalten, damit diese vom Add-In-Manager automatisch erkannt werden kann. Gleichzeitig beginnt der Name dieser Tabelle mit USys…, was neben dem Präfix MSys… dazu führt, dass diese Tabellen standardmäßig nicht im Navigationsbereich von Access angezeigt werden.
Wenn Sie also eine solche Tabelle mit den Feldern aus Bild 3 angelegt, gespeichert und geschlossen haben, wird diese möglicherweise komplett verschwinden. Um diese wieder einzublenden, klicken Sie mit der rechten Maustaste auf die Titelzeile des Navigationsbereichs und wählen dort den Kontextmenübefehl Navigationsoptionen… aus. Hier aktivieren Sie die Option Systemobjekte anzeigen. Anschließend wird die Tabelle USysRegInfo neben einigen anderen zuvor ausgeblendeten Tabellen eingeblendet.
Bild 3: Die Tabelle USysRegInfo
Füllen der Tabelle USysRegInfo
Nun fügen wir die oben beschriebenen Informationen für die Registry in die Tabelle ein – mit je einem Datensatz pro Information. Das Ergebnis sehen sie in Bild 4. Hier sind zwei Informationen wichtig:
Bild 4: Die Tabelle USysRegInfo in der Datenblattansicht
Der Platzhalter HKEY_CURRENT_ACCESS_PROFILE wird beim Installieren des Assistenten durch den Registrypfad für die aktuelle Office-Installation ersetzt. In unserem Fall (Windows 64-Bit, Office 32-Bit) bedeutete dies den folgenden Schlüssel:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access\Wizards\Property Wizards\Format\FormatAssistent
Der Platzhalter |ACCDIR wird durch das Add-In-Verzeichnis von Access ersetzt, in aktuellen Kombinationen aus Windows und Office also durch C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns.
Funktion im Assistenten anlegen
Nun legen wir eine kleine Beispielfunktion in Form der Funktion Autostart an. Diese soll einfach nur testweise die Werte der Parameter strObject, strControl und strCurVal in einer Meldung ausgeben und den neuen Wert für die Eigenschaft per InputBox erfragen:
Public Function Autostart(strObject As String, _ strControl As String, strCurVal As String) As String MsgBox strObject & " " & strControl & " " & strCurVal Autostart = InputBox("Eigenschaftswert: ") End Function
Installation über den Add-In-Manager
Um den Assistenten zu installieren, sind Administrator-Rechte erforderlich, wir müssen Access also als Administrator öffnen.
Dazu klicken Sie mit der rechten Maustaste auf den Befehl zum Starten von Access und wählen dort den Eintrag Als Administrator öffnen aus.
Danach öffnen wir irgendeine Datenbankdatei, da sonst das Ribbon mit dem Befehl zum Starten des Add-In-Managers nicht angezeigt wird.
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