Listenauswahl mit Tastencodes optimieren

Auswahllisten sind für Anwender optimal, weil sie Fehler vermeiden helfen, dennoch sind sie gerade dann, wenn massenhaft Daten erfasst werden, eher unbeliebt, weil zwischen den Tastatureingaben zur Listenauswahl immer wieder der Griff zur Maus notwendig wird. Beheben lässt sich das Problem mit ein paar Einstellungen und etwas VBA-Code.

Das erste Ärgernis bei Pulldown-Listen ist aus Anwendersicht, dass sich die Liste nicht öffnet, wenn das Steuerelement mit Hilfe der [Tab]-Taste angesprungen wird und den Fokus erhält.

Dieses Problem lässt sich ganz einfach mit Hilfe einer Ereignisprozedur für das Ereignis BeiFokuserhalt (GotFocus) aus der Welt schaffen (Listing 1).

Private Sub Typ_GotFocus()
Me.Typ.Dropdown
End Sub

  1. Markieren Sie das Kombinationssteuerelement in der Entwurfsansicht des Formulars.

  2. Wechseln Sie im Eigenschaftenfenster auf die Registerkarte Ereignis, und wählen Sie aus der Auswahlliste für das Ereignis BeiFokuserhalt den Eintrag [Ereignisprozedur] aus.

  3. Klicken Sie danach auf die Schaltfläche Durchsuchen, um die Ereignisprozedur zu erstellen.

  4. Ergänzen Sie diese wie in Listing 1 durch die Anweisung Me.XXX.DropDown, wobei XXX durch den Namen des Steuerelements zu ersetzen ist.

Enthält Ihr Formular viele verschiedene Auswahllisten, müssen Sie für diese eine Anweisung ganz viele Ereignisprozeduren erstellen. In diesem Fall kann es günstiger sein, den alternativen Weg zu wählen und alle Tastendrücke innerhalb des Formulars abzufangen und auszuwerten.

Dazu müssen Sie zunächst die Tastenvorschau für das Formular aktivieren. Sie bewirkt, dass die Tastendrücke zunächst von den EventHandlers des Formulars und erst dann von denen der Steuerelemente abgearbeitet werden.

  1. Markieren Sie in der Entwurfsansicht des Formulars das komplette Formular

  2. Aktivieren Sie im Eigenschaftenfenster die Registerkarte Ereignis und wählen Sie für die Eigenschaft Tastenvorschau den Wert Ja aus.

  3. Wählen Sie nun für die Eigenschaft BeiTaste den Eintrag [Ereignisprozedur] aus, und klicken Sie auf die Durchsuchen-Schaltfläche (Bild 1).

Bild 1: Tastenvorschau aktivieren und Ereignisprozedur erstellen.
Bild 1: Tastenvorschau aktivieren und Ereignisprozedur erstellen.

Die Ereignisprozedur ergänzen Sie dann durch den Code in Listing 2. Er prüft beim Drücken einer Taste, ob es sich um die [Tab]-Taste handelt. Diese wird üblicherweise verwendet, um zwischen den Steuerelementen zu wechseln. Wurde die [Tab]-Taste gedrückt, wird die Dropdown- Methode des aktuellen Steuerelements aufgerufen. Damit es dabei nicht zu einem Laufzeitfehler kommt, wenn es sich bei dem Steuerelement nicht um ein Kombinationslistenfeld handelt, müssen Sie allerdings vorher die Anweisung On Error Resume Next angeben.

Nun werden automatisch alle Dropdown-Listenfelder geöffnet, wenn sie mit der [Tab]-Taste aktiviert werden, ohne dass Sie dazu für jedes Listenfeld eine Ereignisprozedur erstellen müssen.

Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyTab Then
On Error Resume Next
Me.ActiveControl.Dropdown
End If
End Sub