Ribbons: Office-Menü und Schnellzugriffsleiste anpassen

01.01.2007 von André Minhorst
Das Anpassen der Benutzeroberfläche von Access 2007 eröffnet zahlreiche Möglichkeiten. Nach der grundlegenden Einführung im Beitrag „Ribbons programmieren" in der vorigen Ausgabe stellt Ihnen Expert's inside Access in diesem Artikel die wichtigsten Techniken zum Anpassen des Ribbons für professionelle Anwendungen vor.

In der vorherigen Ausgabe habe ich im Artikel „Ribbons programmieren" gezeigt, wie Sie ein einfaches Ribbon per XML erzeugen und aus einer Tabelle oder einer Datei einlesen und anzeigen können. Der vorliegende Artikel zeigt weitere Techniken, um die wichtigsten Steuerelemente des Ribbons zu erzeugen und zu steuern. Erwarten Sie nicht, dass Sie eine umfassende Beschreibung aller Möglichkeiten erhalten, denn sie sind weit umfassender und differenzierter, als es bei den Menüleisten älterer Access-Versionen jemals der Fall war.

Die folgenden Ausführungen gehen davon aus, dass Sie das Ribbon für eine eigene Anwendung anpassen möchten und dafür eine oder mehrere passende XML-Dateien in der Tabelle USysRibbons speichern. Diese können Sie dann entweder in den Access-Optionen als Anwendungs-Ribbons festlegen oder einblenden, wenn ein bestimmtes Formular oder ein Bericht geöffnet ist - in diesem Fall weisen Sie den Inhalt des Feldes RibbonName der Tabelle USysRibbons der Eigenschaft Name der Multifunktionsleiste des passenden Objekts zu.

Achtung, additiv!

Genau genommen beschreiben Sie in der XML-Datei keine Ribbons. Es gibt in Access (und den anderen Office-Anwendungen) nur ein Ribbon, und dieses passen Sie mit den unterschiedlichen XML-Dateien an. Das, was Sie neu hinzufügen, sind auch keine „Ribbons", sondern tab-Elemente, die eines oder mehrere group-Elemente enthalten, die wiederum mit Steuerelementen bestückt sind. Alles, was Sie an tab-, group- und Steuerelementen definieren, wird zu den eingebauten Elementen hinzugefügt; diese können Sie bestenfalls als Ganzes (startFromScratch= true) oder in Teilen (visible= false) ausblenden.

Mit der XML-Datei können Sie noch weitere Anpassungen vornehmen: So lassen sich etwa einige Einträge des Office-Menüs ausblenden (dieses Menü erscheint, wenn Sie auf den Office- Button klicken). Ein weiterer Bereich im XML-Dokument dient zum Anpassen der Schnellzugriffsleiste, die im Standardzustand drei Schaltflächen zum Speichern, Rückgängigmachen und Wiederholen von Aktionen enthält.

Wenn Sie sich einen genauen Überblick über die Möglichkeiten der XML-Datei verschaffen wollen, können Sie dies mithilfe der Datei customUI.xsd tun. Diese legt fest, welche Elemente die XML-Datei zur Beschreibung der Ribbon-Anpassungen haben darf.

Kleine Ribbon-Portionen

Eine umfassende Beschreibung der Möglichkeiten zur Anpassung des Ribbons würde definitiv zu weit gehen; dazu wären etwa vier komplette Hefte notwendig. Daher beschränken sich dieser und folgender Artikel in loser Folge auf die wichtigsten Anpassungen und beschreiben in leicht verdaulichen Häppchen, wie Sie welche Änderung im Ribbon unterbringen, etwa um einer Schaltfläche oder einem anderen Steuerelement ein Symbol hinzuzufügen, eine Eigenschaft dynamisch einzulesen oder zur Laufzeit Anpassungen am Ribbon vorzunehmen.

Eingebaute Elemente ausblenden

Grundlage für die Benutzeroberfläche einer professionellen Anwendung ist, dass der Benutzer nur die Elemente zu sehen bekommt, die er für die durchzuführenden Aufgaben benötigt. Das lässt sich mit XML quasi nicht bewerkstelligen, dafür aber mit einer einfachen Option von Access. Das Deaktivieren der Option Vollständige Menüs anzeigen (Bild 1) sorgt nämlich dafür, dass beinahe alle Elemente wie in Bild 2 ausgeblendet werden: Das Office-Menü enthält nur noch die wichtigsten Einträge, die Schnellzugriffsleiste ist komplett leer, und auch das Ribbon (hier nicht zu sehen) enthält nur noch benutzerdefinierte Elemente.

Bild 1: Das Deaktivieren der Option Vollständige Menüleiste zulassen blendet fast alle eingebauten Elemente der Benutzeroberfläche aus.
Bild 2:Reduziertes Office-Menü und leere Schnellzugriffsleiste.

Nach einer solchen Änderung ist, wie auch in älteren Access-Versionen, ein erneuter Aufruf der Anwendung erforderlich. Um diese Elemente und die Schaltfläche Access-Optionen wieder einzublenden, insbesondere, um den normalen Zustand wieder herzustellen, öffnen Sie die Datenbank einfach erneut bei gedrückter Umschalttaste.

Ribbon-XML einfach erstellen

Die Erstellung der XML-Dokumente mit der Definition der Änderungen ist insofern schwierig, als XML-Dateien immer genau die Groß- und Kleinschreibung einhalten müssen. Das ist auch in diesem Fall nicht anders. Was groß- und was kleingeschrieben werden und wie die XML-Datei insgesamt aufgebaut sein muss - auch dafür gibt es normalerweise Regeln, zumindest, wenn die Anwendung, die das XML-Dokument verarbeiten soll, brauchbare Daten erhalten soll. Für diesen Zweck gibt es DTD- oder XSD-Dateien; in diesem Fall handelt es sich um letztere Variante.

Die XSD-Datei liefert eine exakte Definition, welche Elemente und welche Schreibweisen für eine XML-Datei vorgesehen sind. Im vorliegenden Fall heißt die XSD-Datei customUI.xsd und kann beispielsweise unter http://officeblogs.net/UI/customUI.xsd herunter geladen werden.

Nun hilft Ihnen diese Datei noch immer nicht viel weiter, weil Sie in den zugegebenermaßen recht unübersichtlichen Daten nur schwer die gewünschten Informationen finden. Was tun? Nun, bei der Programmierung mit VBA hilft oftmals IntelliSense weiter. Das ist auch bei XML der Fall - vorausgesetzt, Sie verfügen über eine entsprechende Version von Visual Studio .NET und speichern die XSD-Datei an der richtigen Stelle. Für Visual Studio 2005 ist das beispielsweise das Verzeichnis c:\Programme\Microsoft Visual Studio 8\Xml\Schemas. Wenn Sie dann mit Visual Studio eine XML-Datei anlegen und diese mit der folgenden Zeile beginnen, erhalten Sie die volle IntelliSense-Unterstützung wie beispielsweise in Bild 3:

<customUI xmlns = "http://schemas.microsoft.com/office/2006/01/customui">

Bild 3: Mit Visual Studio .NET lassen sich XML-Dateien bequem mit IntelliSense-Unterstützung eingeben.

Leeres Ribbon

Nach der Einführung im Artikel Ribbons programmieren in Ausgabe 1/2007 wissen Sie bereits, dass Sie mit startFromScratch="true" das Ribbon leeren und selbst neu füllen können. Jedes Ribbon enthält eines oder mehrere Tabs, die innerhalb der entsprechenden Auflistung <tabs>...</tabs> festgelegt werden müssen. Jedes Tab enthält wiederum eine oder mehrere Gruppen, deren Elemente Sie innerhalb der <group>.. </group>-Tags eintragen. Und was Sie einer Gruppe so alles hinzufügen können, sehen Sie ja ansatzweise schon in Bild 3. Allerdings gibt es noch eine ganze Reihe weiterer Steuerelemente, zu denen wir erst etwas später kommen.

Elemente des Office-Menüs ein- und ausblenden

Oben haben Sie bereits erfahren, wie Sie den Großteil der Office-Menü-Elemente en bloc ausblenden. Möglicherweise möchten Sie dem Benutzer aber auch nur einzelne Elemente vorenthalten. Dazu verwenden Sie ein weiteres Element der XML-Datei, das auf der gleichen Ebene wie das tabs-Element liegt, nämlich <officeMenu>...</officeMenu>. Wenn Sie ein Element ausblenden möchten, müssen Sie nur noch dessen idMso ermitteln - das ist die eindeutige ID für ein eingebautes Ribbon-Element. Und diese finden Sie mit folgenden Schritten:

1. Öffnen Sie das Office-Menü mit einem Klick auf den Office-Button.

2. Klicken Sie auf die Schaltfläche Access-Optionen, und öffnen Sie so den Optionen-Dialog.

3. Wechseln Sie zur Registerkarte Anpassen.

4. Wählen Sie aus dem Kombinationsfeld Befehle auswählen die gewünschte Gruppe aus - hier Office-Menü.

5. Fahren Sie mit der Maus über den auszublendenden Befehl, und entnehmen Sie die ID dem nun eingeblendeten Hilfetext (Bild 4).

Bild 4: Über die Access-Optionen kann man die IDs von eingebauten Ribbon-Steuerelementen in Erfahrung bringen.

Schaltfläche nach ID ausblenden

Kennen Sie die passende Konstante, können Sie die Schaltfläche des Office-Menüs für eigene Anwendungen ausblenden. Dazu verwenden Sie einfach das XML-Dokument aus Listing 1.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<officeMenu>
<button idMso="FileOpenDatabase" visible="false"/>
</officeMenu>
</ribbon>
</customUI>

Tragen Sie dieses Listing in die Tabelle USysRibbons ein, die Sie gegebenenfalls noch anlegen müssen. Sie enthält zwei Felder namens RibbonName (Text) und RibbonXML (Memo). Vergeben Sie außerdem einen aussagekräftigen Namen. Dann schließen Sie die Anwendung, öffnen sie erneut, damit Access die Ribbon-Definition einlesen kann, wählen dann in den Optionen unter Aktuelle Datenbank/Multifunktionsleisten- und Symbolleistenoptionen den Namen der Multifunktionsleiste aus und beenden und starten die Anwendung erneut, um die neue Ribbon-Definition zu aktivieren. Wie Bild 5 zeigt, ist die Öffnen-Schaltfläche nicht mehr zu sehen.

Bild 5:Das Office-Menü ohne Öffnen-Schaltfläche.

Auf die gleiche Art können Sie Einträge des Office-Menüs auch einfach deaktivieren. Dazu verwenden Sie statt der Eigenschaft visible die Eigenschaft enabled und stellen diese auf den Wert false ein.

Neuer Eintrag im Office-Menü

Natürlich können Sie dem Office-Menü auch Einträge hinzufügen - eingebaute wie auch benutzerdefinierte. Einen eingebauten Befehl bauen Sie etwa mit dem Code aus Listing 2 ein.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<officeMenu>
<button idMso="FileCompactAndRepairDatabase" insertAfterMso="FileNewDatabase"/>
</officeMenu>
</ribbon>
</customUI>

Damit fügen Sie eine Schaltfläche zum Komprimieren und Reparieren der aktuellen Datenbank hinzu. Die Eigenschaft insertAfterMso sorgt dafür, dass der neue Eintrag hinter dem angegebenen Eintrag eingefügt wird. Bild 6 zeigt den neuen Eintrag des Office-Menüs.

Bild 6:Ein neuer (eingebauter) Eintrag im Office-Menü.

Den Fehlerteufel in den Griff bekommen

Wenn eine Ribbon-Definition Fehler enthält, meldet Access diesen unter Umständen gar nicht. Da dies relativ schnell passieren kann und Sie dann keinen Hinweis auf den möglichen Fehler erhalten, sollten Sie die passende Fehlerbehandlung einschalten. Dazu gehen Sie folgendermaßen vor:

1. Öffnen Sie die Access-Optionen und wechseln Sie zur Registerseite Erweitert.

2. Aktivieren Sie dort im Bereich Allgemein die Option Fehler in Benutzeroberflächen in Add-Ins anzeigen.

Wenn Sie nun eine fehlerhafte XML-Datei als Ribbon-Definition verwenden (dazu reicht ein falsch geschriebener Element- oder Eigenschaftsname), meldet sich Access. Ändern Sie beispielsweise einmal den Namen des Elements <officeMenu> in <officeMenue>, dann schauen Sie, was Access beim nächsten Start der Anwendung macht.

Bild 7 zeigt die passende Fehlermeldung mit genauer Angabe von Zeile und Spalte, inklusive Fehlerbeschreibung. Damit können Sie vorhandene Fehler schnell auffinden.

Bild 7:Diese Fehlermeldung erscheint, wenn die Fehlerbehandlung für Add-Ins aktiviert ist und die Ribbon-Definition einen Fehler aufweist.

Die Schnellzugriffsleiste anpassen

Genau wie das Office-Menü können Sie auch die Schnellzugriffsleiste anpassen. Das entsprechende Element heißt nun nicht mehr officeMenu, sondern qat, das ist die Abkürzung für Quick Access Toolbar und heißt zu Deutsch Schnellzugriffsleiste.

Dabei handelt es sich um die kleine Leiste rechts neben dem Office-Button, der im Urzustand nur drei Schaltflächen zum Speichern, Rückgängigmachen und Wiederherstellen enthält. Auch diesen können Sie erweitern, was gar nicht verkehrt ist: Immerhin sind die Steuerelemente dieser Schaltfläche immer sichtbar und damit für den Anwender mit einem Klick erreichbar.

Wenn Sie etwa die Schaltfläche zum Komprimieren und Reparieren dorthin befördern möchten, verwenden Sie den Code aus Listing 3. Zu beachten ist dabei, dass eine Anpassung der Schnellzugriffsleiste per XML nur möglich ist, wenn Sie die Eigenschaft startFromScratch auf true einstellen, also das Ribbon komplett leeren. Außerdem gibt es unterhalb des <qat>...</qat>-Elements zwei mögliche Auflistungen namens documentControls und sharedControls. Erstere bezieht sich ausschließlich auf die aktuelle Datenbank, die zweite laut Dokumentation auch auf andere Anwendungen.

Allerdings ist nicht klar, wie sich dies auswirkt - weder bei parallel geöffneten Access-Anwendungen noch bei anderen Office-Anwendungen erfolgt hierdurch eine Anpassung der Schnellzugriffsleiste. (am/mha)

Autor André Minhorst <am> ist Dipl.Ing. und freiberuflicher Autor und Programmierer in Duisburg. Er beschäftigt sich seit einigen Jahren intensiv mit den Themen Access, SQL Server und ASP. Neben seiner Autorentätigkeit hat er ein eigenes Redaktionsbüro und entwickelt Datenbank- und Internet-Anwendungen. Sie erreichen ihn unter www.minhorst.com bzw. andre@minhorst.com.