Wenn Sie ein Abonnement des Magazins 'Access im Unternehmen' besitzen, können Sie sich anmelden und den kompletten Artikel lesen.
Anderenfalls können Sie das Abonnement hier im Shop erwerben.
Dynamische Formular-Ribbons
Wenn Sie ein anwendungsweites Ribbon mit dynamischen Elementen versehen wollen, kommen Sie nicht um den Einsatz von Callback-Prozeduren herum. Sie können also nicht mal eben ein neues Ribbon definieren und anzeigen. Anders sieht dies in Formularen aus: Hier können Sie sehr wohl schnell eine neue Ribbon-Definition erstellen und dieses auch direkt anwenden. Damit können Sie dann etwa Ribbons bauen, die direkt auf Ereignisse oder Eigenschaften des Formulars reagieren – ohne excessiven Einsatz von Callback-Funktionen.
Dies ermöglicht die Eigenschaft RibbonName eines Formulars. Diesen können Sie auch zur Laufzeit ändern oder einstellen. Wir schauen uns dies an einem Dummy-Formular an, dem wir verschiedene Ribbon-Definitionen zuweisen und diese durch einen Klick auf eine Schaltfläche anwenden. Später betrachten wir dann noch einen praktischen Anwendungsfall für diese Technik.
Ribbon aktualisieren
Im Beispiel benötigen wir noch die Tabelle USysRibbons, die üblicherweise zum Speichern der Ribbon-Definitionen benötigt wird. Diese sieht wie in Bild 1 aus und enthält bereits eine kleine Ribbon-Definition. Für die im Formular enthaltenen Programmierungen benötigen wir zuvor noch einen Verweis auf die Bibliothek Microsoft Office x.0 Object Library (s. Bild 2). Anschließend erstellen Sie ein neues Formular, das an die Tabelle USysRibbons gebunden ist. Das Formular soll alle Felder dieser Tabelle anzeigen. Unter den gebundenen Textfeldern platzieren Sie eine Schaltfläche namens cmdRibbonAktualisieren. Dieses soll die im Textfeld RibbonXML enthaltene Ribbon-Definition direkt umsetzen und das entsprechende Ribbon anzeigen.
Bild 1: Die Tabelle USysRibbons speichert die Ribbon-Definitionen
Bild 2: Verweis auf die Office-Bibliothek
Diese Prozedur sieht wie folgt aus und erledigt drei Dinge: Sie erzeugt einen temporären Namen für das Ribbon, für den wir praktischerweise einen GUID-Wert nutzen. Dieser ist auf jeden Fall eindeutig, so kann es nicht geschehen, dass wir zwei Ribbon-Definitionen mit dem gleichen Namen temporär in der Datenbank speichern.
Die Funktion zum Erstellen der GUID finden Sie im Modul mdlTools – sie heißt CreateGUID. Die GUID speichert die Prozedur in der Variablen strGUID. Damit laden wir nun die Ribbon-Definition in die Datenbank. Dies erledigen wir mit der Funktion LoadCustomUI, die zwei Parameter erwartet: den Namen des Ribbons sowie die Ribbon-Definition selbst.
Danach liegt die Ribbon-Definition in der Liste der Ribbon-Definitionen vor, die Sie etwa unter Access 2013 in den Access-Optionen über die Eigenschaft Name des Menübands auswählen können (wenn Sie diese Änderung über die Access-Optionen oder per VBA durchführen, wirkt sie sich allerdings erst beim nächsten Start der Anwendung aus).
Allerdings können wir den Namen der Ribbon-Definition der Eigenschaft RibbonName des Formulars zuweisen, wodurch auch gleich die entsprechende Ribbon-Anpassung geladen wird. Diese bleibt nun so lange erhalten, bis das Formular den Fokus verliert (also beispielsweise geschlossen wird):
Private Sub cmdRibbonAktualisieren_Click()
Dim strGUID As String
strGUID = CreateGUID
LoadCustomUI strGUID, Me!RibbonXML
Me.RibbonName = strGUID
End Sub
Um während der Benutzung des Formulars noch normal mit Access arbeiten zu können, fügen wir dem Formular eine weitere Schaltfläche namens cmdStandardribbon hinzu, für deren Beim Klicken-Ereigniseigenschaft wir die folgende Prozedur hinterlegen:
Private Sub cmdStandardribbon_Click()
Me.RibbonName = ""
End Sub
Dies entfernt die benutzerdefinierte Ribbon-Definition wieder. Wenn Sie jedoch eine gültige Ribbon-Definition in das Textfeld eingeben und auf Ribbon aktualisieren klicken, wird das Ribbon wie in Bild 3 angepasst. Das klappt ja schon mal gut – und ist die Grundlage für das nun folgende Praxisbeispiel.
Dies war die Leseprobe dieses Artikels.
Melden Sie sich an, um auf den vollständigen Artikel zuzugreifen.