Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Mit Access 2007 hat Microsoft das Ribbon eingeführt und Access seiner Werkzeuge beraubt, Menüleisten und Kontextmenüs über die Benutzeroberfläche zu erstellen. Nun gut: Menüleisten gibt es nicht mehr, aber Kontextmenüs können in professionellen Anwendung doch sehr hilfreich und vor allem ergonomisch sein. Dieser Artikel zeigt den alternativen Weg zur Erstellung von Kontextmenüs – den über VBA.
Beispieldatenbank
Die Beispiele dieses Artikels finden Sie in der Datenbank 1310_Kontextmenues.mdb.
Kontextmenüs
In Access 2003 und jünger konnten Sie nicht nur Kontextmenüs, sondern auch andere Menüs zusammenklicken. Wenn Sie jedoch einmal dynamisch generierte Kontextmenüs benötigten, mussten Sie auch dort zu VBA greifen – beispielsweise, um verschiedene Werte einer Tabelle per Kontextmenü zur Auswahl anzubieten. Dementsprechend können Sie die in diesem Artikel vorgestellten Techniken auch in Datenbanken einsetzen, die mit Access älteren Jahrgangs als 2007 erstellt wurden.
Sollte Ihnen der Begriff Kontextmenü fremd sein: Das sind diejenigen Menüs, die aufgeklappt werden, wenn Sie mit der rechten Maustaste auf ein Objekt klicken (zum Beispiel auf eine Datei oder einen Ordner im Windows Explorer). Diese Kontextmenüs können Sie auch für Ihre eigenen Anwendungen anlegen und an den entsprechenden Stellen anbieten.
Einsatzbereiche
Access selbst bietet ja bereits eine ganze Reihe eingebauter Kontextmenüs für die verschiedenen Objekte an – für die Spaltenköpfe oder die Felder der Datenblattansicht, für Steuerelemente in Formularen, für Formulare selbst et cetera (siehe Bild 1). Warum sollten Sie also eigene Kontextmenüs hinzufügen Oder sogar die vorhandenen Kontextmenüs ersetzen Ganz einfach: Wenn Sie eine eigene Anwendung erstellen, dann enthält diese auch die von Ihnen definierte Benutzeroberfläche – und dieser können Sie neben den üblichen Ribbons, Formularen und Steuerelementen auch Kontextmenüs hinzufügen.
Bild 1: Beispiel für ein eingebautes Kontextmenü
Sehr sinnvoll sind Kontextmenüs beispielsweise in Zusammenhang mit TreeView-Steuerelementen, da Sie so leicht Funktionen zu den angezeigten Elementen hinzufügen können – etwa zum Bearbeiten des angeklickten Eintrags, zum Löschen des Beitrags oder auch zum Anlegen neuer Einträge.
Vielleicht möchten Sie auch nur eingebaute Steuerelemente anpassen, indem Sie vorhandene Einträge ausblenden oder deaktivieren oder eigene Einträge hinzufügen. So könnten Sie zum Beispiel das Kontextmenü eines Textfeldes um den Kopieren- oder den Ausschneiden-Befehl erleichtern, wenn Sie nicht möchten, dass der Benutzer auf einfache Weise die Inhalte des Textfeldes in die Zwischenablage einfügt. Für all diese Zwecke müssen wir zunächst einen Blick auf die VBA-Objekte zum Steuern des Aussehens von Kontextmenüs werfen.
Kontextmenüs per VBA
Dazu müssen Sie zunächst wissen, dass die Kontextmenüs keine Access-interne Komponente sind, sondern dass die notwendigen Objekte in der Office-Bibliothek enthalten sind. Und da diese einem VBA-Projekt standardmäßig nicht zugewiesen ist, fügen Sie den entsprechenden Verweis nun zunächst hinzu. Dazu öffnen Sie den VBA-Editor (zum Beispiel mit Strg + G) und betätigen den Menübefehl Extras|Verweise. Fügen Sie dort den Eintrag Microsoft Office x.0 Object Library hinzu (siehe Bild 2).
Bild 2: Verweis auf die Office-Bibliothek
Anschließend können Sie im Code-Fenster auf die Objekte dieser Bibliothek zugreifen. Zu Testzwecken wollen wir zunächst eine Liste aller aktuell in der Datenbankdatei enthaltenen Kontextmenüs im Direktfenster ausgeben. Dabei lernen Sie dann gleich einige Objekte und Eigenschaften der Kontextmenüs unter VBA kennen. Der dazu notwendige Code steckt in der Prozedur AlleMenues und sieht wie folgt aus:
Public Sub AlleMenues() Dim cbr As Office.CommandBar For Each cbr In Application.CommandBars Debug.Print cbr.Name Next cbr End Sub
Die Prozedur deklariert eine Variable des Typs CommandBar, was einer Menüleiste, einer Symbolleiste oder einem Kontextmenü entspricht. Mithilfe dieser Variablen durchläuft die Prozedur in einer For Each-Schleife alle Elemente der CommandBars-Auflistung des Application-Objekts, was der aktuellen Instanz von Access entspricht. Sie gibt dann über die Eigenschaft Name den Namen des aktuellen CommandBar-Objekts aus.
Wenn Sie diese Prozedur eingeben und starten, rauschen eine ganze Reihe Einträge durch den Direktbereich. Wieviele waren das Das finden Sie durch Absetzen der folgenden Anweisung im Direktfenster heraus:
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