Ribbon-Elemente aktivieren und deaktivieren

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

Im Beitrag “Software freischalten per Schlüssel” zeigen wir, wie Sie mit einem Freischaltschlüssel eine Information übergeben können, welche Funktionen einer Datenbank für den Benutzer mit dem Schlüssel freigegeben sind und wie Sie etwa in einem Formular die Schaltflächen aktivieren oder deaktivieren, die diese Funktionen aufrufen. Im vorliegenden Beitrag wollen wir uns anschauen, wie Sie die Schaltflächen eines Ribbons abhängig von den mit dem Freischaltschlüssel übergebenen Daten aktivieren oder deaktivieren können.

In dem genannten Beitrag Software freischalten per Schlüssel (www.access-im-unternehmen.de/1126) gibt es eine Funktion, welche einen Wert für die mit einem Freischaltschlüssel freigeschalteten Features des Programms mitliefert. Diese bietet einen Wert von 0 bis 7, wobei diese Zahl in eine Binärzahl umzuwandeln ist und dann über die einzelnen Positionen angibt, welche der Features freigeschaltet sind.

Der Wert 7 würde also beispielsweise bedeuten, dass alle Features funktionieren sollen – 7 entspricht binär 111. Der Wert 4 würde heißen, dass nur die Funktion aktiviert ist, welche der ersten Position von links entspricht, der Wert 1, dass nur die Funktion auf der dritten Position laufen soll.

Bevor wir uns um diesen Wert und seine Interpretation für die Steuer-elemente des Ribbons kümmern, wollen wir aber erst einmal das Ribbon hinzufügen.

Verweis auf die Office-Bibliothek

Für die Programmierung des Ribbons benötigen wir zunächst einen Verweis auf die Office-Bibliothek, den wir über den Verweise-Dialog hinzufügen. Diesen öffnen Sie im VBA-Editor (Alt + F11) über den Menüeintrag Extras|Verweise. Im Dialog setzen Sie einen Haken für den Eintrag Microsoft Office x.0 Object Library, wobei x für die bei Ihnen verfügbare Version steht (siehe Bild 1).

Verweis auf die Office-Bibliothek

Bild 1: Verweis auf die Office-Bibliothek

Tabelle zum Speichern der Ribbon-Definition

Danach fügen Sie eine Tabelle namens USysRibbons zur Datenbank hinzu, welche die Ribbon-Definitionen speichern soll. Diese sieht in der Entwurfsansicht wie in Bild 2 aus.

Definition der Tabelle USysRibbons

Bild 2: Definition der Tabelle USysRibbons

Wegen Ihres Namens, der USys… beginnt, wird die Tabelle normalerweise nicht im Navigationsbereich von Access angezeigt. Sie können diese jedoch einblenden, wenn Sie in den Optionen des Navigationsbereichs, den Sie durch einen Klick mit der rechten Maustaste auf den Titel des Navigationsbereichs und Auswahl des Eintrags Navigationsoptionen… aus dem Kontextmenü den Eintrag Systemobjekte anzeigen aktivieren.

Ribbon definieren

Anschließend können wir das Ribbon definieren. Dieses sieht im ersten Entwurf wie in Listing 1 aus. Den dortigen Code tragen Sie in das Feld RibbonXML der Tabelle USysRibbons ein. Das Feld Ribbonname erhält den Wert Main. Die Tabelle sieht dann im Entwurf wie in Bild 3 aus.

Die Tabelle USysRibbons mit der Ribbon-Definition

Bild 3: Die Tabelle USysRibbons mit der Ribbon-Definition

<xml version="1.0">
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnLoad_NeuesRibbon">
   <ribbon startFromScratch="true">
     <tabs>
       <tab id="tab1" label="Tab 1">
         <group id="grp1" label="Gruppe 1">
           <button label="Button 1" id="btn1"/>
           <button label="Button 2" id="btn2"/>
           <button label="Button 3" id="btn3"/>
         </group>
         <group id="grp2" label="Gruppe 2" getVisible="getVisible">
           <button label="Button 1" id="btn21"/>
         </group>
         <group id="grp3" label="Gruppe 3" getVisible="getVisible">
             <button label="Button 1" id="btn31"/>
         </group>
       </tab>
       <tab id="tab2" label="Tab 2" />
       <tab id="tab3" label="Tab 3" />
     </tabs>
   </ribbon>
</customUI>

Listing 1: Definition des Ribbons mit drei Schaltflächen, drei Tabs und drei Gruppen

Dadurch, dass wir die Eigenschaft startFromScratch des Elements ribbon auf den Wert true eingestellt haben, werden alle eingebauten Elemente des Ribbons ausgeblendet und nur noch die benutzerdefinierten Elemente angezeigt.

Damit das Ribbon nun auch noch in der Anwendung erscheint, sind noch weitere Schritte nötig. Als Erstes müssen Sie die Anwendung schließen und neu starten. Erst dann ist die neue Ribbon-Definition auch in der Auswahlliste der Ribbons für diese Anwendung enthalten. Die Auswahlliste finden Sie, wenn Sie mit einem Klick auf den Datei-Reiter des Ribbons den Backstage-Bereich öffnen und dann auf den Eintrag Optionen klicken. Im nun erscheinenden Dialog Access-Optionen wählen Sie links den Eintrag Aktuelle Datenbank aus. Rechts finden Sie dann unter Menüband- und Symbolleistenoptionen die Eigenschaft Name des Menübands, wo Sie unser soeben erstelltes Ribbon namens Main auswählen (siehe Bild 4).

Auswahl des Ribbons in den Einstellungen der Datenbank

Bild 4: Auswahl des Ribbons in den Einstellungen der Datenbank

Wenn Sie danach die Anwendung nochmals schließen und wieder öffnen, erscheint unser Ribbon und sieht wie in Bild 5 aus.

Benutzerdefiniertes Ribbon

Bild 5: Benutzerdefiniertes Ribbon

Callback-Attribute anlegen

Nun sind allerdings noch keine Elemente deaktiviert geschweige denn hätten wir überhaupt irgendwelche Maßnahmen ergriffen, um dies zu bewerkstelligen. Wie aber wollen wir dafür sorgen, dass die Schaltflächen in Abhängigkeit von den freigeschalteten Funktionen aktiviert oder deaktiviert werden Dazu benötigen wir zunächst einige Callback-Attribute für die einzelnen Elemente sowie die VBA-Prozeduren, welche die passenden Werte zum Aktivieren oder Deaktivieren zurückliefern.

Genau genommen können wir nur die Button-Elemente aktivieren oder deaktivieren, da nur diese über eine enabled-Eigenschaft verfügen und eine entsprechende getEnabled-Eigenschaft.

Wir wollen aber auch anhand der tab– und group-Elemente zeigen, wie sich diese in Abhängigkeit vom Funktionsumfang beeinflussen lassen. Es fehlt diesen Elementen zwar an einer enabled-Eigenschaft, dafür stellen Sie aber ein visible-Attribut und ein entsprechendes getVisible-Callback-Attribut zur Verfügung.

Also statten wir die getEnabled-Attribute der button-Elemente und die getVisible-Attribute der tab– und der group-Elemente mit den Werten getEnabled beziehungsweise getVisible aus. Die Definition des Ribbons sieht dann wie in Listing 2 aus.

<xml version="1.0">
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
   <ribbon startFromScratch="true">
     <tabs>
       <tab id="tab1" label="Tab 1" getVisible="getVisible">
         <group id="grp1" label="Gruppe 1" getVisible="getVisible">
           <button getEnabled="getEnabled" label="Button 1" id="btn1"/>
           <button getEnabled="getEnabled" label="Button 2" id="btn2"/>
           <button getEnabled="getEnabled" label="Button 3" id="btn3"/>
         </group>
         <group id="grp2" label="Gruppe 2" getVisible="getVisible">
           <button label="Button 1" id="btn21"/>
         </group>
         <group id="grp3" label="Gruppe 3" getVisible="getVisible">
             <button label="Button 1" id="btn31"/>
         </group>
       </tab>
       <tab id="tab2" label="Tab 2" getVisible="getVisible"/>
       <tab id="tab3" label="Tab 3" getVisible="getVisible"/>
     </tabs>
   </ribbon>
</customUI>

Listing 2: Definition des Ribbons mit drei Schaltflächen, drei Tabs und drei Gruppen, diesmal mit Callback-Attributen

Was haben wir damit erreicht Wenn wir die Elemente des Ribbons, die wir mit den Callback-Attributen ausgestattet haben, durch Starten der Anwendung sichtbar machen, sucht Access im VBA-Projekt nach VBA-Funktionen, deren Namen den für die Attribute getEnabled und getVisible angegebenen Werten entsprechen. Diese werden dann aufgerufen und wir können innerhalb dieser Funktionen festlegen, welchen Wert die Elemente für die entsprechende Eigenschaft enabled oder visible zugewiesen bekommen.

Enabled-Eigenschaft zur Laufzeit zuweisen

Wir nehmen an, dass die über die im Beitrag Software freischalten per Schlüssel beschriebene Technik den Wert für die freigeschalteten Funktionen in einer öffentlichen Variablen namens intFunktionen im Modul mdlTools speichert:

Public intFunktionen As Integer

Dann können wir in der Funktion getEnabled, die beim Anzeigen der button-Elemente des Ribbons für jedes Element einmal aufgerufen wird, auf diese Variable zugreifen und in Abhängigkeit vom Wert dieser Variablen die einzelnen Steuer-elemente aktivieren oder deaktivieren. Die folgende erste Version der Funktion getEnabled ist der übersichthalber etwas umfangreicher geworden. Sie prüft anhand der Eigenschaft id des Parameters control den Namen des auslösenden Steuerelements und sieht in den Zweiten einer Select Case-Bedingung für jedes Element eine entsprechende Behandlung vor.

Die Schaltfläche btn1 soll beispielsweise aktiviert werden, wenn die erste 1 im Binärwert von intFunktionen gesetzt ist. Das wäre beispielsweise beim Wert 4 der Fall, was binär 100 entspricht. Ob die erste 1 gesetzt ist, ermitteln wir mit dem Ausdruck (intFunktionen And 4) = 4.

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