Kontextmenüs sind die beste Möglichkeit, schnell die zum aktuell unter dem Mauszeiger befindlichen Element passenden Befehle anzuzeigen und auszuwählen. Viele Benutzer verwenden Kontextmenüs einfach nicht, weil sie nichts mit der rechten Maustaste anzufangen wissen, und auch Entwickler lassen sie links liegen, weil sie die Chancen nicht erkennen. Wir zeigen, wie Sie wo mit dem Kontextmenü für perfekte Ergonomie sorgen können.
Grundsätzlich muss man bei Kontextmenüs zwei Wege der Erstellung unterscheiden: Bis Access 2003 gibt es einen komfortablen Dialog für diese Aufgabe, den wir zu Beginn besprechen. Mit Access 2007 hat Microsoft jedoch das Ribbon eingeführt und zwar die Kontextmenüs verschont, aber die Menü- und Symbolleisten sowie den Anpassen-Dialog zum einfachen Erstellen dieser Elemente rausgeworfen (vielleicht kommt er mit der nächsten Office-Version zurück – wer weiß).
Ab Access 2007 ist man somit auf alternative Methoden angewiesen, die in erster Linie auf den Einsatz von VBA hinauslaufen. Der zweite Teil dieses Beitrags beschäftigt sich mit diesem Thema. Schließlich gibt es einige Gelegenheiten für den Einsatz von Kontextmenüs, die wir im dritten Teil dieses Beitrags vorstellen.
Kontextmenüs per Anpassen-Dialog
Der Anpassen-Dialog ist die bequemste Variante zum Erstellen von Menü- und Symbolleisten und auch für Kontextmenüs. Dieser Dialog ist nur bis einschließlich Access 2003 verfügbar und lässt sich, wie treffend, über den Eintrag Anpassen des Kontextmenüs der Menü- und Symbolleisten aufrufen.
Neues Kontextmenü anlegen
Ein neues Kontextmenü legen Sie ausgehend vom Anpassen-Dialog wie folgt an:
- Klicken Sie auf der Registerseite Symbolleisten auf den Eintrag Neu und tragen Sie im nun erscheinenden Fenster den Namen ein, zum Beispiel MeinKontextmenue (siehe Bild 1).
- Die neue Symbolleiste sieht zunächst nicht nach Kontextmenü aus. Bevor wir das ändern, fügen wir noch zwei oder drei Steuerelemente hinzu. Wechseln Sie im Anpassen-Dialog auf die Registerseite Befehle und ziehen Sie aus der rechten Liste den Eintrag Benutzerdefiniert entsprechend der gewünschten Anzahl Steuerelemente in die Symbolleiste.
- Die Symbolleiste sieht nun wie in Bild 2 aus. Wechseln Sie nun zurück zur Registerseite Symbolleisten des Anpassen-Dialogs, stellen Sie sicher, dass der Eintrag MeinKontextmenue ausgewählt ist, und klicken Sie auf die Schaltfläche Eigenschaften.
- Dies öffnet den Dialog aus Bild 3. ändern Sie hier die Eigenschaft Typ auf Popup. Nachdem Sie die folgende Meldung bestätigt haben, verschwindet die Symbolleiste vom Bildschirm und ist auch in der Liste der Symbolleisten im Anpassen-Dialog nicht mehr zu finden.
Bild 1: Anlegen einer neuen Symbolleiste, die einmal ein Kontextmenü werden soll
Bild 2: Symbolleiste mit Schaltflächen
Bild 3: Umwandeln der Symbolleiste in ein Kontextmenü
Access hat das Kontextmenü in eine übergeordnete Symbolleiste namens Kontextmenü verschoben. Wenn Sie den gleichnamigen Eintrag in der Liste der Symbolleisten aktivieren, erscheint eine lange Leiste mit dem Eintrag Benutzerdefiniert, der auch unser Kontextmenü mit den drei Beispielschaltflächen enthält (siehe Bild 4).
Bild 4: Ein Kontextmenü unter vielen
Sie brauchen nun nur noch die Eigenschaften der Schaltflächen, wie das Symbol oder die Beschriftung, einzustellen und festzulegen, welche Funktion Access beim Mausklick auf eine Schaltfläche auslösen soll.
Dazu zeigen Sie wiederum das Kontextmenü der gewünschten Schaltfläche an und wählen den Eintrag Eigenschaften aus (siehe Bild 5). Wichtig ist hier vor allem die Eigenschaft Bei Aktion, der Sie den Namen einer VBA-Funktion mit führendem Gleichheitszeichen und abschließendem Klammernpaar zuweisen. Diese Funktion muss in einem Standardmodul als öffentliche Funktion deklariert sein, für das Beispiel aus der Abbildung also etwa so:
Bild 5: Eigenschaften einer Schaltfläche bearbeiten
Public Function Meldungsfenster() MsgBox "Ich wurde vom Kontextmenü µ aufgerufen." End Function
Kontextmenü anzeigen
Nun müssen wir das Kontextmenü nur noch anzeigen. Am einfachsten erledigt man dies, indem man den Namen des Kontextmenüs der Eigenschaft Kontextmenüleiste eines Formulars, Berichts oder der darin enthaltenen Steuerelemente zuweist und dann die richtige Stelle mit der rechten Maustaste anklickt. Für den Moment wollen wir uns die Erstellung zusätzlicher Elemente sparen und dies einfach per VBA erledigen.
Dafür stellt Access einige Objekte und Methoden bereit. Die CommandBars-Auflistung enthält alle Symbolleisten (zu denen auch die Kontextmenüs gehören) und gibt einen Verweis auf den gewünschten Eintrag zurück, wenn man den Namen der Kontextmenüleiste als Index angibt (dies ginge auch über einen numerischen Index). Die Methode ShowPopup zeigt schließlich die Kontextmenüleiste an, und zwar an der Stelle des Mauszeigers (siehe Bild 6). Diese Anweisung setzen Sie im Direktfenster des VBA-Editors ab, den Sie von Access und auch vom VBA-Editor aus mit der Tastenkombination Strg + G einblenden können.
Bild 6: Anzeigen eines Kontextmenüs per VBA
Commandbars("MeinKontextmenue").ShowPopup
Ein Klick auf den ersten Eintrag des Kontextmenüs liefert schließlich das erwartete Meldungsfenster.
Eingebaute Befehle
Wir sind im ersten Ansatz davon ausgegangen, dass man normalerweise komplett benutzerdefinierte Kontextmenüs entwirft. Dies ist natürlich nicht immer der Fall; manchmal möchte man vielleicht auch einfach ein paar eingebaute Befehle, wie etwa zum Drucken oder Speichern des aktuellen Objekts, verfügbar machen. Solche Befehle fügen Sie genau wie die benutzerdefinierten über die Registerseite Befehle des Anpassen-Dialogs hinzu.
Eingebaute Symbole
Ein wenig Farbe bringen Sie mit den zur Verfügung stehenden Symbolen in das Kontextmenü. Mit den Kontextmenüeinträgen der Menübefehle können Sie im Anpassen-Modus die Symbole vorhandener Befehle kopieren und den benutzerdefinierten Elementen hinzufügen. Weiter unten erfahren Sie, wie Sie auch benutzerdefinierte Symbole zu den Schaltflächen von Kontextmenüs hinzufügen können.
Kontextmenüs unter Access 2007
Nachdem Microsoft den Dialog zum Anpassen von Menüs, Symbolleisten und Kontextmenüs mit Access 2007 gestrichen hat, sind Sie dort beim Erstellen von Kontextmenüs auf einen kleinen Trick angewiesen – oder Sie verwenden direkt VBA.
Die Geschichte mit dem Trick sieht so aus: Sie können mit bestimmten Einstellungen versehene .mdb-Datenbanken unter Access 2007 so öffnen, dass diese ihre Menü- und Symbolleisten genau so wie unter einer älteren Access-Version anzeigen. Wir haben solch ein Exemplar als Beispieldatenbank hinzugefügt (KontextmenuesMitA2007.mdb), das beim Start eine Menüleiste anzeigt und auch das Anzeigen des Anpassen-Dialogs per Kontextmenü zulässt (siehe Bild 7). Hiermit können Sie auch unter Access 2007 Kontextmenüs erstellen. Was aber haben Sie davon, wenn Sie diese in einer .accdb– und nicht in einer .mdb-Datei brauchen Nun, Sie können die Kontextmenüs einfach in die .accdb-Datenbank importieren.
Bild 7: Der Anpassen-Dialog ist auch unter Access 2007 noch verfügbar.
Dazu müssen Sie nur den Ribbon-Befehl Externe Daten|Importieren|Access anklicken, die Quelldatenbank (also die .mdb-Datei) auswählen, im Dialog Objekte importieren mit der Schaltfläche Optionen die erweiterten Optionen anzeigen und dort die Option Menüs und Symbolleisten aktivieren (siehe Bild 8).
Bild 8: Importieren von Kontextmenüs aus einer .mdb-Datei in eine Access 2007-Datenbank
Mit der oben vorgestellten ShowPopup-Methode können Sie nun schnell prüfen, ob die mit dem Anpassen-Dialog zusammengestellten Kontextmenüs erfolgreich importiert wurden.
Kontextmenüs von älteren Access-Versionen importieren
Wenn Sie noch eine ältere Version von Access verwenden und Kontextmenüs in Access 2007 benötigen, können Sie diese auf die gleiche Art und Weise importieren.
Kontextmenüs per VBA erstellen
Am effizientesten und am flexibelsten ist die Erstellung der Kontextmenüs per VBA. Das liegt auch daran, dass wir eine Menge nützlicher Funktionen zusammengetragen haben, die etwa das codegesteuerte Hinzufügen benutzerdefinierter Images erlauben. VBA bietet aber auch viel mehr Möglichkeiten: So können Sie damit beispielsweise zur Laufzeit Einträge zu Kontextmenüs hinzufügen, um diese etwa in Abhängigkeit von den in den Tabellen der Datenbank enthaltenen Daten zu füllen – aber sehen Sie doch einfach selbst.
Die CommandBars-Auflistung
Die CommandBars-Auflistung gibt es in zwei Ausführungen: erstens im Application-Objekt von Access und zweitens in der Office-Bibliothek, die Sie aber nur benötigen, wenn Sie mit den darunter liegenden Elementen arbeiten möchten – und das ist im Folgenden der Fall, weshalb Sie zunächst einen Verweis auf die Bibliothek Microsoft Office xx.0 Object Library anlegen.
Als Erstes geben wir die komplette Liste der Kontextmenüs der Anwendung aus, was prinzipiell dem Ausgeben aller CommandBars-Einträge entspricht, sich aber auf solche Elemente beschränkt, deren Eigenschaft Type den Wert 2 für msoBarTypePopup aufweist:
Public Sub KontextmenuesAusgeben() Dim cbr As CommandBar For Each cbr In CommandBars If cbr.Type = 2 Then Debug.Print cbr.Name End If Next cbr End Sub
Steuerelemente in Kontextmenüs
Die in Kontextmenüs enthaltenen Steuerelemente erhalten Sie über die Controls-Auflistung eines Commandbar-Elements.