Kombinationsfeld per Taste steuern

Kombinationsfelder enthalten viele Einträge, die Sie durch das Aufklappen des Kombinationsfeldes anzeigen und per Mausklick auswählen können. Wenn Sie mit der Tastatur arbeiten, müssen Sie das Kombinationsfeld erst mit der Taste F4 öffnen und dann mit der Nach oben- oder der Nach unten-Taste den gewünschten Eintrag auswählen, den Sie dann durch Verlassen des Steuerelements bestätigen. Das geht auch einfacher, nämlich mit den beiden Tasten “Nach oben” und “Nach unten”. Es bedarf allerdings einiger Zeilen VBA-Code, die wir in diesem Beitrag vorstellen.

Vorbereitung

Um ein Formular mit einem Beispielkombinationsfeld bereitzustellen, legen Sie zunächst ein neues Formular an. Dann legen wir die Tabelle tblArtikel aus der Beispieldatenbank Suedsturm als Datensatzquelle des Formulars fest. Aktivieren Sie dann die Feldliste und ziehen Sie alle Felder aus der Feldliste in den Detailbereich der Entwurfsansicht des Formulars. Die beiden Felder KategorieID und LieferantID werden dann direkt als Kombinationsfelder angelegt.

Für die beiden Kombinationsfelder legen wir die Namen cboLieferantID und cboKategorieID fest. Speichern Sie das Formular dann unter dem Namen frmKombinatoinsfeldMitTaste (siehe Bild 1).

Beispielformular mit zwei Kombinationsfeldern

Bild 1: Beispielformular mit zwei Kombinationsfeldern

Wenn Sie in die Formularansicht wechseln, können Sie bei Tastaturbetrieb den Fokus mit der Tabulator-Taste auf eines der Kombinationsfelder verschieben. Dann öffnen Sie dieses mit der Taste F4 und können dann mit den Tasten Nach oben und Nach unten einen der Einträge auswählen (siehe Bild 2).

Beispielformular mit zwei Kombinationsfeldern in der Formularansicht

Bild 2: Beispielformular mit zwei Kombinationsfeldern in der Formularansicht

Dies wollen wir nun vereinfachen, indem wir das Blättern durch die Einträge ohne öffnen des Kombinationsfeldes ermöglichen. Wie das gelingt, erfahren Sie in den folgenden Abschnitten.

Kombinations-feld-ein-trag per Taste auswählen

Wir wollen das Verhalten nachbilden, das wir sehen, wenn wir uns bei aufgeklapptem Kombinationsfeld mit der Nach oben– und der Nach unten-Taste durch die Einträge bewegen. Hier stellen wir fest, dass jeweils der vorherige oder nächste Eintrag ausgewählt wird, sobald der Benutzer eine der beiden Tasten Nach oben oder Nach unten herunterdrückt.

Damit steht schon einmal das Ereignis fest, dass wir programmieren müssen, nämlich Bei Taste ab. Für dieses Ereignis legen wir nun eine Ereignisprozedur an. Diese sieht ohne eigene Anweisungen nun wie folgt aus:

Private Sub cboLieferantID_KeyDown(KeyCode As Integer,  Shift As Integer)
End Sub

Mit dem Parameter KeyCode erhalten wie eine Zahl, welche die soeben gedrückte Taste repräsentiert, Shift liefert einen Zahlencode für die Tasten Umschalt, Strg und Alt.

Wir wollen zunächst herausfinden, welche Werte der Parameter KeyCode liefert, wenn wir im Kombinationsfeld eine der Tasten Nach oben oder Nach unten betätigen. Dazu fügen wir die folgende Debug.Print-Anweisung zur Ausgabe von KeyCode hinzu:

Private Sub cboLieferantID_KeyDown(KeyCode As Integer,  Shift As Integer)
     Debug.Print KeyCode
End Sub

Betätigen wir nun in der Formularansicht die Nach oben-Taste, wird der Wert 38 im Direktbereich ausgegeben, für die Nach unten-Taste der Wert 40.

Wir müssen also auf die beiden Werte 38 und 40 reagieren, was wir in einer Select Case-Bedingung erledigen.

Die Prozedur sieht danach wie in Listing 1 aus. Sie enthält genau genommen sogar zwei Select Case-Bedingungen. Die erste prüft, ob der Benutzer überhaupt eine der beiden Tasten Nach oben oder Nach unten betätigt hat. In diesem Fall ermitteln wir zunächst den aktuellen Indexwert des Kombinationsfeldes und speichern diesen in der Variablen lngIndex.

Private Sub cboLieferantID_KeyDown(KeyCode As Integer, Shift As Integer)
     Dim lngIndex As Long
     Select Case KeyCode
         Case 38, 40
             lngIndex = Me!cboLieferantID.ListIndex
             Select Case KeyCode
                 Case 38
                     If lngIndex > 0 Then
                         Me!cboLieferantID.ListIndex = lngIndex - 1
                     End If
                 Case 40
                     If lngIndex < Me!cboLieferantID.ListCount - 1 Then
                         Me!cboLieferantID.ListIndex = lngIndex + 1
                     End If
             End Select
             KeyCode = 0
     End Select
End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar