Dynamische Ribbons

Immer wieder fragen Leser, wie man Ribbon-Elemente wie etwa Schaltflächen in Abhängigkeit bestimmter Zustände beeinflussen kann, um diese beispielsweise zu aktivieren oder zu deaktivieren oder sie ein- und auszublenden. Auf diese Weise können Sie die Benutzeroberfläche so anpassen, dass etwa ein Benutzer mit vollen Berechtigungen alle Ribbon-Elemente sieht, während die zum Anzeigen sensibler Daten für andere Mitarbeiter nicht sichtbar oder deaktiviert sind. Lesen Sie, wie sich dies mit dem Ribbon-Admin einrichten lässt.

Dieser Artikel zeigt, wie Sie die Aufgabe mit dem Ribbon-Admin 2010 erledigen. Ganz unten finden Sie die Beispieldatenbank, anhand derer Sie den Code und die Ribbon-Definition von Hand anlegen können.

Starten Sie den Ribbon-Admin 2010 und legen Sie eine neue Anwendung für die aktuelle Datenbank an.

Fügen Sie dann ein neues Ribbon hinzu:

Danach folgt ein customUI-Element:

Auf die gleiche Weise fügen Sie ein ribbon-, ein tabs-, ein tab-, ein group- und zwei button-Elemente hinzu. Für die beiden button-Elemente tragen Sie in den Attributen die Namen btnAlle und btnNurAdmin sowie entsprechende Beschriftungen ein:

Aussehen testen

Wenn Sie schon einmal testen wollen, wie das Ribbon später aussieht, wählen Sie aus dem Kontextmenü des Elements Beispiel den Eintrag Ribbon anzeigen aus.

Das Ergebnis ist kein optischer Geniestreich, aber es erfüllt die Erwartungen:

Variable für das Ribbon festlegen

Nun benötigen wir eine Variable, die beim ersten Anzeigen des Ribbons einen Verweis auf das Ribbon speichert. Diese soll außerdem gleich entsprechend gefüllt werden. Mit dem Ribbon-Admin sind dies nur wenige Mausklicks. Klicken Sie auf das Element customUI und dann mit der rechten Maustaste auf das Textfeld für das Attribut onLoad. Wählen Sie den Kontextmenüeintrag Callback hinzufügen aus:

Es folgen einige Hinweismeldungen. Zunächst legt der Ribbon-Admin 2010 einen Verweis auf die Office-Bibliothek an:

Dann wird ein Modul für den Ribbon-Code erstellt:

Schließlich weist der Ribbon-Admin 2010 noch darauf hin, dass für dieses Ribbon ein individueller Objektname erstellt wird:

Ein Hinweis auf das Ergebnis darf nicht fehlen: Die Funktion OnLoad_Beispiel wurde im Modul mdlRibbons angelegt:

Außerdem wurde das Attribut onLoad mit dem Namen dieser Callback-Funktion gefüllt, also mit OnLoad_Beispiel.

Im VBA-Editor finden Sie das neue Modul wie folgt vor:

Dies führt dazu, dass das Ribbon beim ersten Anzeigen die Callback-Funktion onLoad_Beispiel ausführt und die Variable objRibbon_Beispiel mit einem Verweis auf das IRibbonUI-Objekt füllt, welches den Zugriff auf das Ribbon erlaubt.

Welchen Zweck hat dies? Nun: Sie können nun die Methoden Invalidate und InvalidateControl aufrufen, um die für das Aussehen des Ribbons und seiner Steuerelemente verantwortlichen Ereignisse auszulösen und eventuell dafür hinterlegte Callback-Funktionen ausführen – zum Beispiel so:

objribbon_beispiel.Invalidate

Ribbon-XML zur Datenbank hinzufügen

Früher oder später müssen Sie die XML-Definition, die das soeben erstellte Ribbon beschreibt, in die Datenbank übertragen. Dazu wählen Sie den folgenden Befehl aus:

Dies legt nach der folgenden Meldung eine neue Tabelle namens USysRibbons in der aktuell geöffneten Datenbank an:

Die Tabelle und ihr Inhalt sehen etwa so aus (die Tabelle wird nicht im Navigationsbereich angezeigt, solange Sie nicht die Anzeige von Systemobjekten aktivieren):

Damit das Ribbon gleich beim Start der Anwendung angezeigt wird, rufen Sie danach noch diesen Befehl auf:

Nun schließen Sie die Anwendung und öffnen sie erneut, damit die Ribbon-Definition angewendet wird. Das neue tab-Element wird nicht direkt aktiviert, sondern ganz hinten eingereiht:

Erst ein Klick auf den -Reiter zeigt das Ribbon an:

Wenn Sie Änderungen an der Definition des Ribbons vornehmen, müssen Sie diese jeweils neu in die Zielanwendung übertragen. Sie überschreiben damit eine eventuell vorhandene Definition gleichen Namens.

Attribute dynamisch einstellen

Jetzt kommt der interessante Teil: Das Aktivieren und Deaktivieren der Ribbon-Elemente in Abhängigkeit bestimmter Parameter. Wir wollen eine Callback-Funktion erstellen, welche die Eigenschaft Enabled des Ribbon-Buttons btnNurAdmin in Abhängigkeit eines bestimmten Wertes auf true oder false einstellt. Dazu klicken Sie im Ribbon-Admin 2010 auf das entsprechende Element im Baum und wählen den Befehl Callback hinzufügen aus dem Kontextmenü des Attributs getEnabled aus:

Dies legt eine Callback-Funktion im Modul mdlRibbons an. Diese füllen wir mit ein paar Zeilen Code. Die Callback-Funktion ist für alle Elemente des Ribbons verantwortlich, sodass wir erst prüfen müssen, durch welches Element die Funktion ausgelöst wurde.

Die Eigenschaft id des mit dem Parameter control gelieferten Steuerelement-Objekts liefert den Namen des Steuerelements, also beispielsweise btnNurAdmin. Auf diesen prüfen wir (hier in einer If…Then-Bedingung, bei mehreren zu berücksichtigenden Elementen empfiehlt sich die Select Case-Bedingung) und stellen das Attribut enabled auf den Wert der Variablen bolIstAdmin ein:

Die get…-Callback-Funktionen werden beim ersten Anzeigen des Ribbons direkt aufgerufen. Das bedeutet, dass der Button btnNurAdmin beim Anzeigen ausgeblendet sein sollte, denn bolIstAdmin wird als Boolean-Variable ja standardmäßig mit dem Wert False gefüllt. Schauen wir uns an, wie das Ribbon nun aussieht:

Wie erwartet, wird der Befehl deaktiviert. Wie aber können Sie den Befehl nun zur Laufzeit aktivieren und deaktivieren? Dazu brauchen Sie nur den Wert der Variablen bolIstAdmin zu ändern und die Invalidate-Methode des IRibbonUI-Objekts aufzurufen, welches das Ribbon referenziert. Die folgenden Anweisungen können Sie im Direktbereich absetzen:

bolIstAdmin = True
objRibbon_Beispiel.Invalidate

Damit stellen Sie zunächst den Administrator-Modus an und aktualisieren dann das Ribbon, indem Sie mit der Invalidate-Methode die aktuellen dynamischen Werte für „ungültig“ erklären. Dadurch werden die get…-Attribute der betroffenen Elemente gleich beim nächsten Anzeigen neu ausgelöst – im besten Falle also sofort, sofern die Elemente sichtbar sind.

Zusammenfassung und Ausblick

Dieser Artikel beschreibt die grundlegende Technik, um Dynamik in das Ribbon zu bringen. Darauf aufbauend können Sie beliebige Eigenschaften einstellen – der Name des jeweiligen Attributs muss nur mit get… beginnen.

Haben Sie spezielle Wünsche oder Fragen? Schreiben Sie einen Kommentar!

Downloads

Die Beispieldatenbank enthält die Tabelle USysRibbons mit der Ribbon-Definition, das Modul mdlRibbons mit den Callback-Funktionen sowie ein Formular, mit dem Sie die Funktionalität ausprobieren können:

Download

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.

  • Thema aus der Praxis, gut gelöst und gut beschrieben

    Hallo Herr Minhorst,
    vielen Dank für Ihren Artikel. Ich stehe in der Entwicklung von Ribbons erst am Anfang. Ihre Artikel sind jedoch sehr detailliert und leicht nachvollziehbar, so daß ich sicher schnell zu einem positiven Ergebnis kommen werde. Darüber hinaus bin ja überzeugter Nutzer Ihrer Fachschriften und Bücher.
    Vielen Dank und weiterhin viel Erfolg
    Hannes Lingl

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]