Dynamische Formular-Ribbons

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.

Die Tabelle USysRibbons speichert die Ribbon-Definitionen

Bild 1: Die Tabelle USysRibbons speichert die Ribbon-Definitionen

Verweis auf die Office-Bibliothek

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.

Bitte geben Sie die Zahlenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Aktuell im Blog
Onlinebanking mit Access

Es ist geschafft: Endlich ist das Buch Onlinebanking mit Access fertiggeschrieben. Das war... [mehr]

Direktzugriff auf Tabellen und Felder

Die IntelliSense-Erweiterung für Tabellen und Felder hat mir soviel Spaß gemacht, dass ich gleich... [mehr]

IntelliSense für Tabellen und Felder

Wenn Sie mit dem VBA-Editor arbeiten und dort gelegentlich SQL-Anweisungen eingeben, müssen Sie... [mehr]

Download Access und SQL Server

Erfahren Sie, welche Schritte zum Download des aktuellen Stands des Buchs "Access und SQL Server"... [mehr]

Bilder in Access 2013

Wer die Bibliothek mdlOGL0710 von Sascha Trowitzsch oder ein ähnliches Modul aus meinen... [mehr]

Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit... [mehr]

Die Blogmaschine

Einen kleinen Blog zusätzlich zum Shop zu betreiben ist eine tolle Sache. Hier lassen sich... [mehr]

Wegwerfadressen für die Newsletteranmeldung

Die Verwendung von Wegwerf-Adressen für die Nutzung aller möglichen Online-Dienste nimmt... [mehr]

Access und Facebook

Facebook und Access - das ist eine der wenigen Kombinationen, die ich noch nicht in die Mangel... [mehr]

Access und SQL Server - das Projekt

Mein neues Buch Access und SQL Server (gemeinsam mit Bernd Jungbluth) geht in die Endphase. Wer... [mehr]