Kombinationsfeld rauf und runter

Kombinationsfelder sind wirklich praktisch, wenn es um die Auswahl von Lookup-Daten geht. Aber immerhin muss man immer noch auf die Schaltfläche zum Aufklappen der Liste klicken, um einen der Einträge auszuwählen. Wir haben uns eine noch schnellere Variante einfallen lassen, bei der Sie einfach nur mit der Maus in das Kombinationsfeld klicken und diese dann nach oben oder unten bewegen müssen, um zwischen den Einträgen zu navigieren. Dieser Beitrag zeigt, wie Sie ein Kombinationsfeld mit dieser Funktion ausstatten.

Beispieldatenbank

Als Beispiel verwenden wir eine Datenbank mit einer einfachen Kundentabelle sowie einem Formular, das die enthaltenen Datensätze per Kombinationsfeld zur Auswahl anbietet (siehe Bild 1). Das Kombinationsfeld heißt cboKunden und verwendet die folgende Abfrage als Datensatzherkunft:

Beispielformular mit dem Kombinationsfeld

Bild 1: Beispielformular mit dem Kombinationsfeld

SELECT tblKunden.KundeID, tblKunden.Firma 
FROM tblKunden ORDER BY tblKunden.Firma;

Damit das Primärschlüsselfeld nicht eingeblendet wird, sondern nur das Feld Firma, stellen Sie die Eigenschaft Spaltenanzahl auf den Wert 2 und die Eigenschaft Spaltenbreiten auf den Wert 0cm ein. Sie können das Kombinationsfeld nun wie gewohnt aufklappen und einen Eintrag auswählen.

Rauf und runter

Wenn der Benutzer das Kombinationsfeld öffnet, findet er dieses in der Regel leer vor (siehe Bild 2). Nun soll der Benutzer mit der Maus auf das Kombinationsfeld klicken und bei gedrückter Maustaste den Mauszeiger nach unten bewegen können, um den ersten Eintrag der Datensatzherkunft auszuwählen. Bewegt er den Mauszeiger bei gedrückter Maustaste weiter nach unten, wird der nächste Eintrag ausgewählt und so weiter. Bewegt er hingegen den Mauszeiger bei gedrückter Maustaste nach oben, wird wieder der vorherige Eintrag ausgewählt. Auf diese Weise kann der Benutzer durch alle vorhandenen Einträge navigieren.

Kombinationsfeld ohne Auswahl

Bild 2: Kombinationsfeld ohne Auswahl

Benötigte Ereignisse

Bevor wir die neue Funktion programmieren, müssen wir uns überlegen, welche Ereignisse wir hier verwenden können. Ganz sicher werden wir das Ereignis Bei Mausbewegung des Kombinationsfeldes benötigen, denn dieses wird ja immer ausgelöst, wenn sich die Maus ein kleines Stückchen bewegt hat.

Gegebenenfalls benötigen wir auch noch die beiden Ereignisse Bei Maustaste ab und Bei Maustaste auf des Kombinationsfeldes, um Vorbereitungen und abschließende Arbeiten für den eigentlichen Vorgang des Ziehens mit der Maus durchzuführen.

Das Ereignis Bei Mausbewegung

Dieses für unsere Lösung existenzielle Ereignis wird alle paar Millisekunden ausgelöst. Es liefert dann mit den folgenden Parametern wichtige Werte:

  • Button: Gibt an, welche Taste der Maus beim Bewegen der Maus gedrückt ist. Es gibt die für uns interessanten Werte 0 (keine Taste), 1 (linke Taste) und 2 (rechte Taste).
  • Shift: Gibt an, ob der Benutzer beim Bewegen der Maus eine der Tasten Umschalt, Strg oder Alt gedrückt hält.
  • X: Liefert die aktuelle X-Position des Mauszeigers.
  • Y: Liefert die aktuelle Y-Position des Mauszeigers.

Die Positionen X und Y werden in 15er-Schritten und in der Größe Twips geliefert. Jeder Bildschirmpunkt hat eine bestimmte Anzahl Twips, wobei diese Anzahl von verschiedenen Faktoren abhängen kann, in der Regel aber 15 beträgt.

Das Ereignis Bei Maustaste ab

Dieses Ereignis wird beim Herunterdrücken der Maustaste ausgelöst. Es liefert die gleichen Parameter wie das Ereignis Bei Mausbewegung.

Programmierung der Funktion

Grundsätzlich sieht die Vorgehensweise wie folgt aus: Wir definieren eine Ereignisprozedur für das Ereignis Bei Mausbewegung. In dieser prüfen wir, ob sich die vertikale Position des Mauszeigers verändert hat und in welchem Umfang. Zusätzlich legen wir fest, nach welcher in der Y-Richtung zurückgelegten Strecke der nächste oder der vorherige Eintrag des Listenfeldes angezeigt werden soll.

Wir könnten die kleinste Einheit wählen, also 15 Twips, aber dann würden wir sehr schnell durch die Einträge rutschen und hätten kaum die Möglichkeit, gezielt einen Eintrag auszuwählen. Also stellen wir die zurückzulegende Strecke etwas größer ein, zum Beispiel auf 150 Twips. Dies legen wir in einer Konstanten namens cIntervall fest, die wir im Kopf des Klassenmoduls des Formulars wie folgt deklarieren:

Const cIntervall As Integer = 150

Um zu prüfen, ob der Mauszeiger seit dem letzten ändern des ausgewählten Eintrags die in cIntervall angegebene Strecke zurückgelegt hat, müssen wir die Position beim ändern des Eintrags speichern. Dazu verwenden wir eine weitere Variable, die wir ebenfalls modulweit deklarieren und die wie folgt aussieht:

Dim lngPosVorher As Long

Wir wollen immer nur bis zum letzten Eintrag scrollen, nicht darüber hinaus. Daher deklarieren wir eine Variable, mit der wir die Anzahl der enthaltenen Einträge speichern:


Nur für Abonnenten

Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.

Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.

So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.

Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.

Bereits Abonnent? Hier einloggen


Kostenlos & unverbindlich

Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?

Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?

In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.

Jetzt kostenloses Access-Audit anfordern →

Schreibe einen Kommentar