Berichtsereignisse: Bei Aktivierung/Deaktivierung

Neben den verschiedenen Bereichen und Steuerelementen liefern Berichte auch eine Reihe von Ereigniseigenschaften, für die Sie wie bei Formularen Ereignisprozeduren hinterlegen können. Zwei Ereignisse, die man üblicherweise nicht besonders oft benötigt, heißen „Bei Aktivierung“ und „Bei Deaktivierung“. Wir zeigen, wie Sie diese einsetzen können: nämlich, um Elemente im Ribbon abhängig von diesen beiden Ereignissen zu aktivieren oder zu deaktivieren – zum Beispiel zum Ein- oder Ausschalten einer Drucken-Schaltfläche.

Bei Aktivierung und Bei Deaktivierung: Berichtsabhängige Funktionen ein- und ausschalten

Wenn Sie einen Bericht geöffnet haben und diesen dann schließen oder den Fokus auf ein anderes Objekt setzen, möchten Sie möglicherweise Elemente des Ribbons aktivieren oder deaktivieren. Eine Drucken-Schaltfläche macht beispielsweise am meisten Sinn, wenn gerade ein Bericht angezeigt wird. Was benötigen wir also, um das geplante Beispiel zum Aktivieren und Deaktivieren einer Ribbon-Schaltfläche synchron zum Auslösen der Ereignisse Bei Aktivierung und Bei Deaktivierung zu nutzen

Richtig: Ein Ribbon, ein Objekt, welches die Ribbon-Definition referenziert, damit wir auf ihre Methoden zugreifen können, sowie ein paar Zeilen VBA-Code.

Das Ribbon fügen Sie hinzu, indem Sie die Tabelle USysRibbons erstellen und diese wie in Bild 1 mit der Definition des gewünschten Ribbons füllen. Damit Sie diese Tabelle nach der Erstellung sehen, müssen Sie in den Optionen des Navigationsbereichs die Option Systemobjekte anzeigen aktivieren.

Tabelle mit der Ribbon-Definition

Bild 1: Tabelle mit der Ribbon-Definition

Die entsprechende Ribbon-Definition finden Sie in Listing 1. Die Elemente bilden die Struktur des Ribbons ab. Unter dem customUI-Element finden Sie das tab-Element, dann das group-Element und schließlich das button-Element als Schaltfläche. Wichtig sind in diesem Zusammenhang einige Attribute, die festlegen, welche VBA-Routinen beim Eintreten bestimmter Ereignisse auszulösen sind.

<xml version="1.0">
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" 
    onLoad="OnLoad_Main" loadImage="loadImage">
     <ribbon>
         <tabs>
             <tab id="tabFunktionen" label="Funktionen">
                 <group id="grpBerichte" label="Berichte">
                     <button image="printer" getEnabled="getEnabled" label="Drucken" id="btnDrucken" 
                         onAction="onAction" size="large"/>
                 </group>
             </tab>
         </tabs>
     </ribbon>
</customUI>

Listing 1: Ribbon-Definition für unsere Drucken-Schaltfläche

Das erste ist das Attribut onLoad, welches die folgende Prozedur auslöst, die Sie in ein Standardmodul namens mdlRibbons einfügen:

Sub onLoad_Main(ribbon As IRibbonUI)
     Set objRibbon_Main = ribbon
End Sub

Die Prozedur weist der Variablen objRibbon_Main einen Verweis auf diese Ribbon-Definition zu. Diese Variable deklarieren wir wie folgt im Kopf des gleichen Moduls:

Public objRibbon_Main As IRibbonUI

Die Klasse IRibbonUI ist in der Bibliothek Microsoft Office x.0 Object Library enthalten, weshalb Sie einen entsprechenden Verweis auf diese Klasse hinzufügen müssen (VBA-Editor, Menüpunkt Extras|Verweise, s. Bild 2).

Verweis auf die Office-Bibliothek

Bild 2: Verweis auf die Office-Bibliothek

Das zweite wichtige Attribut gehört zum button-Element und heißt getEnabled. Dieses Attribut wird immer ausgelöst, wenn das Ribbon eingeblendet oder mit einer speziellen Methode namens Invalidate aktualisiert wird. Für diese legen wir den Wert getEnabled an, also gleichlautend mit dem Attributnamen. So heißt dann auch die dadurch ausgelöste VBA-Funktion, die so aussieht:

Sub getEnabled(control As IRibbonControl, ByRef enabled)
     Dim obj As Object
     On Error Resume Next
     Set obj = Screen.ActiveReport
     On Error GoTo 0
     If Not obj Is Nothing Then
         enabled = True
     Else
         enabled = False
     End If
End Sub

Die Methode soll prüfen, ob es sich bei dem aktuell aktiven Objekt im Access-Fenster, also etwa einem Formular, einem Bericht oder einer Tabelle, um einen Bericht handelt. In diesem Fall soll das button-Element mit dem Namen btnDrucken aktiviert, anderenfalls deaktiviert werden. Dies prüfen wir, indem wir den Inhalt der Funktion Screen.ActiveReport in die Variable obj schreiben. Ist das aktuelle Objekt tatsächlich ein Bericht, erhält obj einen Verweis auf dieses Objekt. Anderenfalls löst dies einen Fehler aus, der aber nicht gemeldet wird, da wir die Fehlerbehandlung zuvor mit On Error Resume Next deaktiviert haben. Hat obj nach dieser Prüfung einen Wert, liegt ein Bericht als aktives Objekt vor und wir stellen den Wert des Rückgabeparameters enabled auf true ein. Anderenfalls erhält dieser Parameter den Wert false.

Auslösen der getEnabled-Funktion

Diese Funktion wird also erstmalig beim Einblenden dieses Teils der Ribbon-Definition ausgelöst, also wenn Sie auf das tab-Element namens Funktionen drücken. Vorher müssen wir allerdings erstmal dafür sorgen, dass die Ribbon-Definition überhaupt angezeigt wird. Nachdem Sie die Definition in die Tabelle USysRibbons eingetragen haben, schließen Sie dazu die Datenbank und öffnen sie erneut. Wenn Sie nun die Access-Optionen öffnen und zum Bereich Aktuelle Datenbank wechseln, finden Sie unter Menüband- und Symbolleistenoptionen in der Option Name des Menübands den Eintrag Main und wählen diesen aus (s. Bild 3).

Festlegen der Ribbon-Definition Main als Standard-Ribbondefinition

Bild 3: Festlegen der Ribbon-Definition Main als Standard-Ribbondefinition


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar