In modernen Browsern wie Chrome oder Edge ist es längst selbstverständlich: Mit Tastenkombinationen wie Alt + 1, Alt + 2, Alt + 3 kann man blitzschnell zwischen geöffneten Tabs springen. Hat man diesen Shortcut einmal verinnerlicht, will man nicht mehr ohne arbeiten. Die Tastenkombinationen sind viel schneller, als wenn man mit der Maus auf den jeweiligen Reiter klickt. Man könnte zwar auch per Strg + Tab zwischen den Seiten wechseln, aber warum nicht direkt zur gesuchten Information springen? Da wir auch in Access standardmäßig eine Ansicht vorfinden, die über entsprechende Reiter angesteuert werden kann, stellt sich die Frage: Können wir nicht auch hier solche Tastenkombinationen nutzen? Genau das untersuchen wir in diesem Beitrag.
Alt + 1, Alt + 2, Alt + 3 für Formulare in Registerkartenansicht
Access zeigt bei neu angelegten Datenbanken zunächst alle neu erstellten oder geöffneten Elemente als Tab an, der den vollständigen Arbeitsbereich des Access-Fensters einnimmt. Dem einen mag das gefallen, andere bevorzugen die Anzeige als überlappende Fenster. Bevor wir in unsere Lösung einsteigen, schauen wir uns kurz an, wie wir standardmäßig verwendete Einstellungen ändern können.
Dazu benötigen wir den Dialog mit den Access-Optionen, den wir über Datei|Optionen öffnen.
Hier wechseln wir zum Bereich Aktuelle Datenbank und finden dort die Option Dokumentfensteroptionen vor (siehe Bild 1).
Bild 1: Optionen zum Einstellen der Anzeige von Fenstern innerhalb von Access
Der Bereich, in dem sich diese Option befindet, deutet bereits darauf hin, dass es sich um eine Einstellung handelt, die individuell je Datenbank vorgenommen werden kann.
Die aktuelle Standardeinstellung lautet Dokumente im Registerkartenformat und zusätzlich ist die Option Dokumentregisterkarten anzeigen aktiviert.
Dies führt zu der Anzeige, auf die sich dieser Beitrag bezieht (siehe Bild 2). Wenn wir hier die Option Dokumentregisterkarten anzeigen deaktivieren, blendet Access die Registerreiter aus und wir sehen nur das aktuell aktive Formular.
Bild 2: Registerkarten einer Access-Anwendung
Sollten wir jedoch die Option Dokumentfensteroptionen auf Überlappende Fenster einstellen, sehen wir erstens keine Registerreiter für die Fenster.
Wir können die geöffneten Fenster zwar nach wie vor maximieren, aber auch als einzelne Fenster innerhalb des Arbeitsbereichs von Access positionieren. Anwendungen, die das gleichzeitige Anzeigen mehrerer Formulare erfordern, sind mit dieser Einstellung am besten bedient.
Wechseln zwischen den Registerkarten
Wir wollen uns jedoch auf die Einstellung im Registerkartenformat mit Registerkartenreitern konzentrieren. Die üblicherweise verwendeten Methoden zum Wechseln des aktuell im Vordergrund befindlichen Fensters sind die Folgenden:
- Anklicken des gewünschten Registerreiters mit der Maus
- Betätigen der Tastenkombination Strg + Tab, um vom aktiven zum nächsten Register zu wechseln. Man kann übrigens nicht mit Umschalt + Strg + Tab in die entgegengesetzte Richtung wechseln, wie es bei anderen Anwendungen möglich ist. Diese Funktion können wir aber auch noch nachreichen.
Es gibt keine andere eingebaute Methode, Tastenkombinationen wie Strg + 1 et cetera betätigen wir ohne jeden Effekt.
Ziel: Alt + 1 bis Alt + 9 aktivieren
Unser Ziel ist es, Alt + 1 bis Alt + 9 so zu programmieren, dass bei Betätigen dieser Tastenkombination das entsprechende Formular aktiviert wird – genau wie im Browser.
Unser erster Ansatz ist, jedem Formular eine Ereignisprozedur hinzuzufügen, die auf das Betätigen der entsprechenden Tastenkombination reagiert und den Fokus auf die entsprechende Registerkarte verschiebt.
Vorbereitung
Damit Access auf Tastatureingaben reagiert, müssen wir die Eigenschaft Tastenvorschau aller beteiligten Formulare auf Ja einstellen. Das bewirkt, dass alle Tastaturereignisse zuerst an das entsprechende Ereignis des Formulars gesendet werden und nicht etwa an ein Steuerelement, das gerade den Fokus hat.
Diese Einstellung führen wir wie in Bild 3 durch.
Bild 3: Einstellen der Eigenschaft Tastenvorschau auf den Wert Ja
Wie kann ich die Tabs gezielt aktivieren?
Bevor wir überhaupt Code schreiben, der die aktive Registerseite aktivieren soll, müssen wir uns überlegen, wie man eine Registerseite aktiviert. Wir gehen hier davon aus, dass wir die Technik nur für Formulare einsetzen.
Hinter jedem Tab steckt also ein Formular, was bedeutet, dass wir diese über die Forms-Auflistung aktivieren können. Probieren wir das aus, sehen wir:
Forms(0).SetFocus aktiviert das erste Registerblatt, Forms(1).SetFocus das zweite und so weiter. Die Formulare werden also entsprechend der Reihenfolge der Registerseiten indiziert, sodass wir über den 0-basierten Index auf diese zugreifen können.
Anlegen der Ereignisprozedur
Nun wollen wir dafür sorgen, dass beim Betätigen einer der Tastenkombinationen Alt + 1 bis Alt + 9 die entsprechende Registerseite aktiviert wird.
Dazu hinterlegen wir zuerst für das Formular frm1 eine Ereignisprozedur, die durch das Ereignis Bei Taste ab des Formulars ausgelöst wird.
Dazu wählen wir für die entsprechende Eigenschaft den Eintrag [Ereignisprozedur] aus und klicken auf die Schaltfläche mit den drei Punkten (siehe Bild 4).
Bild 4: Anlegen der Ereignisprozedur
Dies zeigt die automatisch angelegte, noch leere Ereignisprozedur im VBA-Editor an, die wir wie in Bild 5 ergänzen.
Bild 5: Die fertige Ereignisprozedur
Der Code erledigt im Einzelnen die folgenden Schritte:
- Der Parameter Shift übergibt eine Konstante, die angibt, ob eine der Tasten Umschalt (acShiftMask), Strg (acCtrlMask) oder Alt (acAltMask) betätigt wurde. Wir prüfen, ob dieser Parameter den Wert acAltMask enthält, was bedeutet, dass der Benutzer die Alt-Taste gedrückt hält.
- Ist das der Fall, prüfen wir den Wert des Parameters KeyCode. Diesen vergleichen wir mit den Werten bis 57. Der Wert entspricht der Zahl 1, der Wert 50 der Zahl 2 und so weiter.
- Sind beide Bedingungen erfüllt, ermitteln wir den Index des Formulars, das aktiviert werden soll, aus dem Wert von KeyCode. Von diesem ziehen wir den Wert ab, sodass für die angeklickte Tastenkombination Alt + 1 der Wert 0 in der Variablen intTab landet, für Alt + 2 der Wert 1 und so weiter.
- Bevor wir damit das gewünschte Tab aktivieren können, müssen wir noch prüfen, ob der Benutzer nicht eine Kombination betätigt hat, die sich auf ein nicht vorhandenes Formular auswirken würde. Also prüfen wir, ob intTab kleiner als die Anzahl der angezeigten Formulare ist (intTab < Forms.Count).
- Ist auch diese Bedingung erfüllt, setzen wir den Fokus auf das Formular mit dem Index aus intTab.
- Schließlich stellen wir noch den Wert von KeyCode auf 0 ein, damit die gedrückte Tastenkombination keine andere Funktion auslöst (zum Beispiel die mit einer eingebauten Tastenkombination) oder einen Ton ausgibt, der bei einer ungültigen Tastenkombination von Access erzeugt wird.
Hier ist der Code der vollständigen Prozedur:
Private Sub Form_KeyDown(KeyCode As Integer, _ Shift As Integer) Dim intTab As Integer If Shift = acAltMask Then Select Case KeyCode Case To 57 intTab = KeyCode - If intTab < Forms.Count Then Forms(intTab).SetFocus KeyCode = 0 End If End Select End If End Sub
Diese Prozedur fügen wir nun allen Formularen hinzu, die diese Funktion auslösen sollen. Vergessen Sie nicht, auch für alle betroffenen Formulare die Eigenschaft Tastenvorschau auf den Wert Ja einzustellen.
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo