Im Beitrag „Schnelle Schaltflächen mit Stil“ (www.access-im-unternehmen.de/1563) haben wir ein Formular vorgestellt, mit dem wir komfortabel Schaltflächen anlegen können – mit Icon, Beschriftung, passendem Namen und Ereignisprozedur. Dieses Formular lässt sich in dieser Lösung allerdings nur nutzen, wenn es in der gleichen Anwendung enthalten ist, deren Formulare wir damit anpassen wollen. Um dies praktischer zu gestalten, wollen wir die Lösung in einen Assistenten umwandeln, der beim Hinzufügen eines Buttons zu einem Formular automatisch angezeigt wird. Die dazu notwendigen Schritte beschreiben wir in diesem Beitrag.
Steuerelement-Wizards
Die Grundlagen zum Erstellen von Steuerelement-Assistenten haben wir bereits im Beitrag Steuerelement-Wizards programmieren (www.access-im-unternehmen.de/1593) beschrieben.
Lösung in Button-Wizards umprogrammieren
Um aus der Access-Datenbank mit dem Formular zum Erstellen von Schaltflächen (siehe Bild 1) einen Steuerelement-Wizard zu machen, benennen wir diese in eine .accda-Datei um.

Bild 1: Formular zum Erstellen von Schaltflächen
Außerdem fügen wir eine Tabelle namens USysRegInfo hinzu, in der wir die Informationen speichern, die beim Installieren des Wizards über den Add-In-Manager von Access in der Registry landen sollen.
Diese werden beim Start von Access ausgelesen, damit der Wizard an der entsprechenden Stelle aufgerufen wird.
Wie diese Tabelle aufgebaut ist und was die einzelnen Einträge bedeuten, erläutern wir ausführlich im oben genannten Beitrag. In diesem Fall enthält sie die Einträge aus Bild 2.

Bild 2: Die Tabelle USysRegInfo mit den Informationen des Wizards für die Registry
Wichtig ist, dass der Wert in der Zeile mit dem Wert Library im Feld ValName mit dem Namen der .accda-Datei übereinstimmt und das wir die zum Starten verwendete VBA-Funktion genauso nennen wie für Function angegeben.
Startfunktion für den Wizard anlegen
In einem neuen Modul namens mdlAddIn hinterlegen wir die Funktion, die beim Starten des Wizards aufgerufen werden soll. Diese gestalten wir wie in Listing 1. Die Startzeile der Funktion muss genauso aufgebaut sein und muss zwingend die angegebenen Parameter enthalten.
Public Function Autostart_amvButtonWizard(Optional strControlName As String, Optional strLabelName As String) _ As Variant On Error GoTo Fehler DoCmd.OpenForm "frmButtonWizard", WindowMode:=acDialog, OpenArgs:=strControlName Ende: Exit Function Fehler: Select Case Err.Number Case 0 Case 2501 Case Else MsgBox "Fehler " & Err.Number & vbCrLf & Err.Description, vbOKOnly + vbCritical, _ "Fehler beim Start von amvButtonWizard" End Select End Function
Listing 1: Funktion, die beim Start des Wizards aufgerufen wird
In der Funktion rufen wir das Formular frmButtonWizard als modalen Dialog auf und übergeben diesem mit OpenArgs den Namen der neu erstellten Schaltfläche.
Diese Funktion hat eine Fehlerbehandlung, die speziell den Fehler 2501 nicht behandelt. Dieser tritt auf, wenn wir später im Ereignis Form_Open des Formulars das Öffnen mit Cancel = True abbrechen. Die entsprechende eingebaute Fehlermeldung wollen wir unterbinden, da wir bereits durch eine Meldung in Form_Open darauf hinweisen, dass das Formular nicht geöffnet werden konnte.
Wizard installieren
Damit haben wir bereits das Grundgerüst erstellt und können den Wizard installieren. Dazu schließen wir die Wizard-Datenbank und öffnen eine beliebige andere Access-Datenbank im Administrator-Modus. Hier starten wir über den Ribbon-Befehl Datenbanktools|Add-Ins|Add-Ins|Add-In-Manager den Add-In-Manager, klicken auf Neues hinzufügen… und wählen unsere .accda-Datei aus.
Danach können wir prüfen, ob der Assistent gestartet wird, wenn wir einem Formular in der Entwurfsansicht einen neuen Button hinzufügen.
Dieser sollte nun im Dialog Generator auswählen neben dem eingebauten Eintrag Befehlsschaltflächen-Assistent erscheinen.
Wenn wir dort den Eintrag amvButtonWizard anklicken und das Formular frmButtonWizard erscheint, sind wir auf dem richtigen Weg.
Das Formular des Button-Wizards ist allerdings aktuell noch so programmiert, dass einfach eine neue Schaltfläche angelegt wird, und nicht die durch das Hinzufügen über die Toolbox erzeugte Schaltfläche angepasst wird. Dies werden wir in den folgenden Abschnitten ändern.
Anpassen des Formulars frmButtonWizard
Um die Anpassung durchzuführen und gleichzeitig testen zu können, schließen wir die Datenbank, über die wir den Wizard installiert haben.
Dann öffnen wir die .accda-Datenbank selbst – allerdings die Version, die durch den Add-In-Manager in das Add-Ins-Verzeichnis kopiert wurde. Dieses Verzeichnis können wir mit der folgenden Prozedur ermitteln, die eine Funktion der nicht dokumentierten Klasse Wizhook nutzt:
Public Sub AddInDir() WizHook.Key = 51488399 Debug.Print WizHook.OfficeAddInDir End Sub
Diese liefert auf unserem System das folgende Verzeichnis:
C:\Users\[Benutzername]\AppData\Roaming\Microsoft\AddIns\
Die in diesem Verzeichnis enthaltene Datei amvButtonWizard.accda öffnen wir schließlich.
Hier passen wir das Ereignis Form_Open an (siehe Listing 2). Diesem fügen wir eine Prüfung hinzu, ob mit dem Öffnungsargument, das wir mit Me.OpenArgs auslesen, der Name des neu erstellten und anzupassenden Steuerelements übergeben wurde. Falls nicht, wird das Öffnen des Assistenten an dieser Stelle abgebrochen.
Private Sub Form_Open(Cancel As Integer) Dim lngError As Long Dim varPictureData As Variant Dim dbc As DAO.Database Set dbc = CodeDb dbc.Execute "DELETE FROM tblHistory", dbFailOnError On Error Resume Next TempVars("Form") = Screen.ActiveForm.Name lngError = Err.Number On Error GoTo 0 If IsNull(Me.OpenArgs) Then MsgBox "Es wurde kein zu bearbeitender Button übergeben.", vbOKOnly + vbExclamation, "Kein Button übergeben" Cancel = True Exit Sub End If TempVars("Steuerelementname") = Me.OpenArgs If Not lngError = 0 Then MsgBox "Es ist kein Formular geöffnet, dem ein Button hinzugefügt werden kann.", vbOKOnly + vbExclamation, _ "amvButtonWizard - Kein Formular geöffnet." Cancel = True Exit Sub Else If Not Screen.ActiveForm.CurrentView = 0 Then MsgBox "Das Formular, dem ein Button hinzugefügt werden soll, muss in der Entwurfsansicht geöffnet sein.", _ vbOKOnly + vbExclamation, "amvButtonWizard - Formular nicht im Entwurf geöffnet" Cancel = True Exit Sub End If End If TempVars("Picture") = "" TempVars("Beschriftung") = "" Call LoadImages End Sub
Listing 2: Prozedur, die beim Öffnen des Formulars ausgelöst wird
Anderenfalls speichern wir den Namen dieses Buttons in der TempVar-Variablen Steuerelementname. Damit sind die Arbeiten an der Form_Open-Prozedur abgeschlossen.
Außerdem müssen wir in den beiden Prozeduren txtSteuerelementname_Change und txtBeschriftung_Change die Zeile auskommentieren, welche die TempVars-Variable Steuerelementname ändert.
Jetzt müssen wir den Schritt anpassen, der das im Formular konfigurierte Steuerelement anlegt.
Wir wollen hier kein neues Steuerelement anlegen, sondern die durch den Benutzer angelegte Schaltfläche soll nach den Angaben im Formular angepasst werden.
Schaltfläche anpassen statt anlegen
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →