Kombinationsfeld per Taste steuern

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

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

Listing 1: Kombinationsfeldeinträge auswählen mit den Nach oben- und Nach unten-Tasten

Dann folgt die zweite Select Case-Bedingung, in der wir nach den Werten 38 (Nach oben) und 40 (Nach unten) unterscheiden.

Im Falle der Taste Nach oben prüfen wir, ob der aktuelle Index größer als 0 ist. Dazu der Hinweis, dass der Wert der Eigenschaft ListIndex bei noch nicht vorhandener Auswahl den Wert -1 hat und dass dieser 0-basiert ist.

Ist die Bedingung erfüllt, ziehen wir vom aktuellen Indexwert den Wert 1 ab und weisen das Ergebnis der Eigenschaft ListIndex des Kombinationsfeldes zu. Somit stellen wir den Index jeweils auf den vorherigen Wert ein und zeigen das jeweils darüber liegende Element an.

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

Schreibe einen Kommentar