Der Backstage-Bereich, Teil I

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Mit Access 2010 hat Microsoft die Benutzeroberfläche nicht ganz so radikal wie in Access 2007 umgekrempelt. Mit dem Backstage-Bereich statt des Office-Menüs gibt es aber dennoch eine Menge Neues zu berichten. Der Backstage-Bereich bietet enorme Möglichkeiten, aber es gibt auch eine schlechte Nachricht: Genau wie beim Ribbon müssen Sie auch hier tief in die XML-Kiste greifen, um diesen Bereich zu gestalten – oder auch nicht, wie dieser Beitrag zeigen wird.

Der Backstage-Bereich von Access und auch der übrigen Office-Anwendungen enthält im Wesentlichen die Funktionen, die einst im Datei-Menü (bis Office 2003) beziehungsweise im Office-Menü (Office 2007) enthalten waren. Im Fall von Access finden Sie hier außerdem einige Elemente des früheren Extras-Menüs wie beispielsweise die Funktionen zum Komprimieren und Reparieren, Verschlüsseln oder zum Erstellen einer .mde/.accde-Datenbank.

Den Backstage-Bereich öffnen Sie durch einen Klick auf den Datei-Tab des Ribbons.

Die tollste Neuerung ist eine Erweiterung der Liste der zuletzt geöffneten Datenbankdateien: Bereits auf den ersten Blick finden Sie eine Liste mit Dateinamen links im Backstage. Ein weiterer Klick auf den Eintrag Zuletzt verwendet zeigt dann eine wesentlich umfangreichere und detailliertere Liste der zuletzt verwendeten Datenbanken an (s. Bild 1).

pic001.png

Bild 1: Liste der zuletzt verwendeten Datenbanken

Und es kommt noch besser: Mit den Pinnwand-Nadel-Symbolen können Sie die angezeigten Einträge ganz oben in der Liste fixieren, sodass wichtige Datenbanken immer verfügbar sind, auch wenn Sie diese zuletzt nicht so häufig verwendet haben.

Unterschiede zwischen Definition und Aufbau

Beim Blick auf die Benutzeroberfläche könnte man den Eindruck gewinnen, dass der Backstage-Bereich ein Teil des Ribbons ist – immerhin öffnen Sie ihn über eines der Ribbon-Tabs. In der XML-Definition des Ribbons wird später jedoch klar werden, dass dies nicht die ganze Wahrheit ist. Tatsächlich gibt es dort ein Hauptelement namens customUI, dem die Elemente ribbon und backstage genau wie commands und contextMenus untergeordnet sind. Deshalb sprechen wir im Folgenden auch von CustomUI-Anpassung statt von Ribbon-Anpassung.

Anpassung

Für den Access-Entwickler ergeben sich einige Möglichkeiten: Im Backstage-Bereich lassen sich wunderbar eigene Element unterbringen, ja sogar komplette Anwendungsbereiche. Grundsätzlich haben Sie dort fast die gleichen Möglichkeiten wie in richtigen Access-Formularen. Gleichwohl sei direkt zu Beginn angemerkt, dass der Aufbau und die Pflege von Anwendungsteilen, die statt in Formulare in den Backstage-Bereich ausgelagert werden, wesentlich aufwendiger sein dürfte.

Backstage anpassen

Das Anpassen des Backstage-Bereichs erfolgt genau wie beim Ribbon unter Access 2007 und 2010 über die Erstellung eines XML-Dokuments, das dann optimalerweise in einer speziellen Tabelle der Datenbank gespeichert wird. Damit eine der in dieser Tabelle gespeicherten Ribbon-Definitionen gleich beim Start der Anwendung zum Einsatz kommt, legen Sie den Namen dieser Definition in den Access-Optionen dieser Datenbankdatei fest.

Im Einzelnen sieht das so aus, dass Sie zunächst eine Tabelle namens USysRibbons erstellen, die wie in Bild 2 aufgebaut ist.

pic002.png

Bild 2: Tabelle zum Speichern der CustomUI-Definitionen

In dieser Tabelle speichern Sie je Datensatz den Namen des Ribbons sowie die XML-Definition dieses Ribbons. Der Name ist wichtig, weil Sie das Ribbon darüber in den Access-Optionen als Anwendungsribbon einstellen können.

Gegenüber den CustomUI-Definitionen unter Access 2007 verwenden Sie unter Access 2010 ein neues Schema, das unter anderem die Definition des Backstage-Bereichs festlegt. Die erste Zeile einer jeden XML-CustomUI-Definition sieht unter Access 2010 daher so aus:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">

Das den Backstage-Bereich zusammenfassende Element folgt direkt unterhalb des customUI-Elements und heißt folgerichtig backstage.

<backstage>
...
</backstage>

Es enthält alle weiteren Elemente des Backstage-Bereichs. Für die folgende Beschreibung der Implementierung einer CustomUI-Definition fügen wir noch ein weiteres Element hinzu, das eine Schaltfläche zum Backstage-Bereich hinzufügt. Die Definition sieht so aus:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <backstage>
        <button id="btn1" label="Beispielbutton"/>
    </backstage>
</customUI>

Damit die Anwendung den Backstage-Bereich um diese Schaltfläche erweitert, fügen Sie die obige XML-Definition gemeinsam mit dem Namen EinfacherBackstagebereich zur Tabelle USysRibbons hinzu (s. Bild 3).

pic003.png

Bild 3: Beispiel einer CustomUI-Definiton in der Tabelle USysRibbons

Danach schließen Sie die Anwendung und öffnen sie erneut. Wechseln Sie zum Backstage-Bereich und klicken Sie unten auf Optionen. Im nun erscheinenden Dialog wechseln Sie zum Bereich Aktuelle Datenbank und wählen dort unter Name des Menübands den Wert EinfacherBackstagebereich aus (s. Bild 4).

pic004.png

Bild 4: Einstellen der customUI-Definition für die aktuelle Anwendung

Schließen Sie den Dialog und die Datenbank und öffnen Sie sie nochmals neu. Wenn Sie nun zum Backstage-Bereich wechseln, finden Sie ganz unten die soeben definierte Schaltfläche (s. Bild 5).

pic005.png

Bild 5: Ein benutzerdefinierter Button im Backstage-Bereich

Platz schaffen

Im Gegensatz zum Office-Menü lassen sich im Backstage-Bereich alle eingebauten Elemente ausblenden. Bevor wir uns also um das Erstellen eigener Elemente im Backstage-Bereich kümmern, entsorgen wir erst einmal die vorhandenen Elemente.

Es gibt für jedes eingebaute Element im CustomUI einen eindeutigen Bezeichner, die sogenannte idMso. Diese idMso können Sie für viele Elemente ermitteln, indem Sie in den Access-Optionen zur Registerseite Symbolleiste für den Schnellzugriff wechseln, dort im linken Listenfeld den gewünschten Befehl ausfindig machen und mit der Maus darüberfahren. Es erscheint dann ein Tooltip-Text, der die englische idMso enthält (s. Bild 6). Dort finden Sie allerdings nur die idMsos für Schaltflächen, nicht für Tabs, Gruppen und andere Struktur-Elemente des CustomUI. Eine komplette Liste aller idMsos stellt Microsoft daher in Form einer Excel-Tabelle zum Download bereit. Die für Access relevante Tabelle finden Sie im Download zu diesem Beitrag. Die Tabelle heißt AccessControls.xlsx.

pic006.png

Bild 6: Ermitteln der idMso eingebauter customUI-Elemente

Wenn Sie die idMso etwa einer Schaltfläche des Backstage-Bereichs kennen, den Sie beispielsweise ausblenden möchten, können Sie diese Schaltfläche wie das oben beschriebene button-Element definieren.

Sie lassen allerdings das id-Attribut weg und ersetzen dieses durch das idMso-Attribut. Außerdem brauchen Sie natürlich kein label-Attribut anzugeben, denn eingebaute Steuerelemente besitzen bereits eine voreingestellte Beschriftung.

Da Sie das Steuerelement verbergen möchten, fügen Sie das Attribut visible hinzu und legen den Wert false fest. Für die Speichern-Schaltfläche sieht das etwa so aus:

<button idMso="FileSave" visible="false"/>

Auf die gleiche Weise verfahren Sie mit den übrigen Schaltflächen. Anschließend kümmern Sie sich um die Schaltflächen, welche die Anzeige verschiedener Bereiche rechts im Backstage bewirken – also beispielsweise Informationen oder Zuletzt verwendet.

Dies sind keine herkömmlichen button-Elemente, sondern tab-Elemente des Backstage-Bereichs.

Davon abgesehen verhalten sich diese allerdings genau so wie die button-Elemente, sodass Sie etwa den Eintrag Informationen mit der folgenden Zeile verschwinden lassen:

<tab idMso="TabInfo" visible="false"/>

Definieren Sie ein XML-Dokument wie in Bild 7 aus. Leider sind dort immer noch die zuletzt verwendeten Datenbanken zu sehen. Die könnten Sie zwar theoretisch manuell entfernen, indem Sie auf der Registerseite Zuletzt verwendet die Eigenschaft Schnellzugriff auf die Anzahl von zuletzt verwendeten Datenbanken auf 0 einstellen, aber dadurch geschieht dies noch lange nicht auf anderen Rechnern, die diese Anwendung öffnen.

Listing 1: Diese Prozedur reagiert auf das Anklicken von Kontextmenüeinträgen.

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <backstage>
        <button idMso="FileSave" visible="false"/>
        <button idMso="ApplicationOptionsDialog" visible="false"/>
        <button idMso="SaveObjectAs" visible="false"/>
        <button idMso="FileCloseDatabase" visible="false"/>
        <button idMso="FileExit" visible="false"/>
        <button idMso="FileOpen" visible="false"/>
        <button idMso="FileSaveAsCurrentFileFormat" visible="false"/>
        <tab idMso="TabHelp" visible="false"/>
        <tab idMso="TabInfo" visible="false"/>
        <tab idMso="TabRecent" visible="false"/>
        <tab idMso="TabNew" visible="false"/>
        <tab idMso="TabPrint" visible="false"/>
        <tab idMso="TabShare" visible="false"/>
    </backstage>
</customUI>

pic007.png

Bild 7: Fast der komplette Backstage-Bereich ist leer.

Leider gibt es auch keine Option, mit der sich diese Eigenschaft direkt unter VBA einstellen ließe – der hier eingestellte Wert befindet sich nämlich in der Windows-Registry. Aber auch die dort gespeicherten Werte lassen sich per VBA beinflussen, wenn auch nicht ganz so einfach. Genau genommen sind dazu die Anweisungen aus Listing 2 erforderlich – samt einigen API-Deklarationen und Konstanten, die Sie in der Beispieldatenbank im Modul mdlRegistry finden. Probieren Sie den Aufruf dieser Funktion im Direktfenster (Strg + G) aus und wechseln Sie dann zum Backstage-Bereich:

QuickAccessDisplay False

Listing 2: Diese Prozedur aktiviert und deaktiviert die Anzeige des Schnellzugriffs auf die zuletzt verwendeten Dateien.

Public Function QuickAccessDisplay(bol As Boolean)
    Dim kHnd As LongPtr
    Dim lngValue As Long
    Dim lngRtn As Long
    lngValue = Abs(bol)
    Const strSubKey = "Software\Microsoft\Office\14.0\Access\File MRU"
    Const strName = "Quick Access Display"
    lngRtn = RegOpenKeyEx(HKEY_CURRENT_USER, strSubKey, 0, KEY_SET_VALUE, kHnd)
    If lngRtn = ERROR_SUCCESS Then
        RegSetValueEx kHnd, strName, 0, REG_DWORD, lngValue, Len(lngValue)
    End If
    RegCloseKey kHnd
End Function

Die änderung wirkt sich bei aktivem Backstage-Bereich erst nach dem Schließen und erneuten Aktivieren des Backstage-Bereichs aus. Rückgängig machen Sie die änderung hiermit:

QuickAccessDisplay True

Wann aber rufen Sie diese Funktion auf Und wie machen Sie die Einstellung wieder rückgängig Immerhin ist diese nicht anwendungsbezogen, sondern bleibt auch nach dem Schließen der Anwendung erhalten.

Die erste Frage ist scheinbar schnell geklärt: Das Element backstage verfügt über zwei Attribute, für die Sie Callback-Funktionen hinterlegen können. Die Attribute onHide und onShow arbeiten dabei wie die Ereignisprozeduren von Formularen.

Aber um es vorwegzunehmen: Dies sind nicht die richtigen Attribute. Stattdessen verwenden wir das onLoad-Attribut des customUI-Elements und weisen diesem den Wert OnLoad_Backstageelementeausblenden zu:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad_Backstageelementeausblenden">

Damit dies etwas bewirkt, legen Sie ein neues VBA-Standardmodul namens mdlRibbons an und fügen dort folgende Prozedur hinzu:

Sub onLoad_Backstageelementeausblenden(ribbon As IRibbonUI)
    QuickAccessDisplay False
End Sub

Danach haben Sie es geschafft: Der Backstage-Bereich ist komplett leer. Allerdings wird die Einstellung noch nicht wieder rückgängig gemacht. Dazu können wir leider dennoch nicht die Eigenschaft OnHide des backstage-Elements verwenden: Diese blendet die Schnellzugriffs-Einträge zwar wieder ein, aber diese werden beim Schließen und erneuten Aktivieren des Backstage-Bereichs nicht wieder ausgeblendet.

Der Aufruf des folgenden Befehls gehört also in ein Formular, das beim Öffnen der Anwendung unsichtbar geöffnet wird und erst beim Schließen mitgeschlossen wird. Dort legen Sie für die Ereigniseigenschaft Beim Entladen die folgende Ereignisprozedur an:

Private Sub Form_Unload(Cancel As Integer)
    QuickAccessDisplay True
End Sub

Das Formular öffnen Sie beim Start der Anwendung im Makro Autoexec mit dem Wert Ausgeblendet für den Parameter Fenstermodus (siehe Beispieldatenbank).

Fertig – der Backstage-Bereich ist nun komplett geleert.

Einfache Schaltflächen

Am schnellsten fügen Sie dem Backstage-Bereich einfache Schaltflächen im linken Bereich zu (s. Bild 8). Dazu fügen Sie unterhalb des backstage-Elements einfach ein button-Element ein. Das im customUI-Element angegebene loadImage-Attribut verweist auf eine VBA-Prozedur, die das im image-Attribut der Schaltfläche angegebene Bild lädt – mehr dazu im zweiten Teil der Beitragsreihe:

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

Testzugang

eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar