Zum Gestalten benutzerdefinierter Ribbons für Ihre Access-Anwendung gibt es zwei unterschiedliche Lösungen. Die eine setzt vollständig auf VBA-Code und die Methode LoadCustomUI, die andere verwendet eine ausgeblendete Tabelle USysRibbons, die Sie jeweils mit den XML-Auszeichnungen für die Anpassungen versehen. Dass jedoch auch noch eine dritte Lösung existiert, ist weitgehend unbekannt.
DocUICustomization
Recherchieren Sie im Netz nach diesem Begriff, so werden Sie nicht viel Erhellendes über ihn finden. Microsoft hat diese Datenbankeigenschaft nicht dokumentiert, und andere Entwickler oder Autoren übersahen ihn bisher offenbar. Tatsächlich aber ist er der Schlüssel zu unserer Lösung. Doch fallen wir nicht gleich mit der Tür ins Haus und sehen uns an, wie sie sich in der Beispieldatenbank RibbonOhne TabelleUndCode.accdb präsentiert!
Nach ihrem Start zeigt sie sich wie in Bild 1. Hier sind unter dem neuen Tab Aber Hallo! einige Buttons und ein einfaches Menü untergebracht. Die eingebauten Tabs von Access sind ausgeblendet. Der Tab Datei allerdings ist vorhanden und aktiviert den Backstage-Bereich in gewohnter Weise. Beim Klick auf die Elemente der Hallo-Gruppe öffnen sich Meldungsfenster, damit deutlich wird, dass es sich hier nicht etwa nur um Optik geht, sondern dass wohl funktionierende Callback-Routinen im VBA-Projekt implementiert sind.
Bild 1: Der minimalistische Ribbon der Beispieldatenbank mit einigen Buttons und einem Menüelement
Der Code ist hier öffnet automatisch das Modul mdlOptionen der Datenbank und gibt die Click-Callback-Prozeduren für die Buttons preis. Irgendwelche Routinen zur Modifikation des Ribbon, etwa per LoadCustomUI, werden Sie hingegen vergeblich suchen. Auch eine Tabelle USysRibbons fehlt und die anderen Tabellen sind gleichfalls unauffällig. Wo also versteckt sich der XML-Code für die Anpassungen
Setzen Sie dazu die folgende Zeile im VBA-Direktfenster ab:
CurrentDb.Properties("DocUICustomization").Value
Damit wird tatsächlich der ganze zuständige XML-Code herausgegeben! Er unterscheidet sich nicht weiter von den sonst gebräuchlichen Codes, die Sie in der Tabelle USysRibbons oder über LoadCustomUI einsetzen. Warum hüllt sich Microsoft in Schweigen über diese Datenbankeigenschaft Die mögliche Erklärung folgt.
Ribbon-Anpassungen über die Oberfläche
Seit Access 2010 haben Sie die Möglichkeit, für eine Datenbank zumindest der Schnellzugriffsleiste eigene Elemente zu spendieren. öffnen Sie dazu bei geladener Datenbank die Optionen von Access und aktivieren den Eintrag Symbolleiste für den Schnellzugriff. Im rechten Bereich des Dialogs findet sich nun die Liste der Elemente der Schnellzugriffsleiste. Das Kombinationsfeld darüber zeigt den unscheinbaren Eintrag Für alle Dokumente (Standard). Doch hier lässt sich auch die aktuelle Datenbank Für “xyz.accdb“ auswählen! Bei Aktivierung leert sich die Liste, falls die Datenbank noch mit keinen Anpassungen versehen wurde.
Sie können nun aus dem Pool der Befehle links der Datenbank Elemente hinzufügen (s. Bild 2). Nach dem Speichern über OK stehen sie in Zukunft immer für diese Datenbank zur Verfügung. Andere Datenbanken zeigen sie nicht. Ergo müssen diese Anpassungen irgendwo in der Datenbank abgespeichert sein. Und deren Eigenschaft DocUICustomization ist eben dieser Ort.
Bild 2: Exklusive Schnellzugriffselemente für geladene Datenbank
Sie können sich den Inhalt dieser Eigenschaft nach der manuellen Anpassung mit der erwähnten VBA-Zeile ausgeben lassen. Der XML-Code für die abgebildete Anpassung sieht so aus, wie in Listing 1. Die Struktur ist die übliche, nur dass hier jedem XML-Tag der Namespace mso vorangestellt ist, was, wie wir noch sehen werden, eigentlich überflüssig ist.
<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2006/01/customui"> <mso:ribbon> <mso:qat> <mso:documentControls> <mso:control idQ="mso:ManageReplies" visible="true"/> <mso:control idQ="mso:FileSendAsAttachment" visible="true"/> </mso:documentControls> </mso:qat> </mso:ribbon> </mso:customUI>
Listing 1: Der XML-Code für die Schnellzugriffsanpassungen aus der Eigenschaft DocUICustomization
Es hat den Anschein, als ob Microsoft Entwicklern die Dokumentation dieser Eigenschaft vorenthält, damit sie der manuellen Anpassung vorbehalten bleibt.
Zuweisung an DocUICustomization
Statt über den Optionen-Dialog können Sie nun die Anpassung auch per Code vornehmen, indem Sie der Eigenschaft einen eigenen Wert zuweisen. Listing 2 zeigt ein extrem kurzes Beispiel.
Sub ModifyCustUI() Dim sXML As String sXML = CurrentDb.Properties("DocUICustomization").Value sXML = Replace(sXML, "mso:", vbNullString) CurrentDb.Properties("DocUICustomization").Value = sXML End Sub
Listing 2: Modifizieren des XML-Codes für die Schnellzugriffsanpassungen der aktuellen Datenbank
Die Variable sXML nimmt zunächst den XML-Code entgegen. über Replace entfernt die nächste Zeile alle mso:-Strings aus ihrem Inhalt. Dann wird der geänderte Code der Eigenschaft wieder zugewiesen. Dies wirkt sich noch nicht unmittelbar aus.
Wie bei manuellen Anpassungen auch muss die Datenbank geschlossen und wieder geöffnet werden. Es zeigt sich dann, dass das Entfernen der mso:-Präfixe keine negativen Auswirkungen auf das Funktionieren der Anpassungen hat. Das ist indessen für den XML-Kenner auch nicht verwunderlich, da nun als Standard-Namespace (xmlns) für das XML in der ersten Zeile das Schema direkt deklariert ist, statt über das Präfix mso. Beides kommt im Prinzip auf das Gleiche heraus.
Die spannende Frage ist nun, welche Ribbon-Anpassungen sich alle in DocUICustomization abseits der Schnellzugriffsleiste unterbringen lassen.
Was geht, was geht nicht
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