Tipp 2.17 - Combobox: Eintrag per Doppelklick
Wie kann ich den nächsten Eintrag eines Kombinationsfeldes mit einem Doppelklick auswählen?
Im Eigenschaftsfenster der Microsoft Access Formulare und Berichte haben Sie die Möglichkeit, viele Einstellungen über die Kombinationsfelder mit einem Doppelklick auszuwählen. Das bedeutet, wenn Sie eine Einstellung doppelklicken, wird automatisch der nächste Eintrag aus der Liste ausgewählt und angezeigt. Dieses nützliche Verhalten können Sie auch für Ihre eigenen Kombinationsfelder implementieren.
Alles was man dazu benötigt, ist eine globale Funktion. Der Funktion CboNextValue können Sie über zwei optionale Parameter zum einen die Bezeichnung der betreffende Combobox (z.B. "cboTest") und zum anderen die Richtung der Auswahl übergeben, je nachdem, ob der nächste (1) oder der vorherige Eintrag (-1) ausgewählt werden soll. Kopieren Sie einfach nachfolgenden Quellcode in die Zwischenablage und fügen Sie anschließend den Inhalt der Zwischenablage in ein neues Modul ein. Die Aufrufparameter finden Sie im Quellcode beschrieben.
Die Funktion
Beispiel:
' Combobox next value Public Function CboNextValue(Optional psCtlName As String = vbNullString, _ Optional plNext As Long = 1) As Boolean '// ===================================================== '// Methode | Nächster Eintrag einer Combobox mit ' Doppelklick '// ----------------------------------------------------- '// Parameter | psCtlName - Name des Controls (optional) ' plNext - Richtung (optional) '// ----------------------------------------------------- '// Rückgabe | Boolean = True=i.O., False=Probleme '// ----------------------------------------------------- '// Erstellt | Manuela Kulpa '// | EDV Innovation & Consulting - Dormagen '// ----------------------------------------------------- '// Beispielaufruf: '// im Formular beim jeweiligen Kombinationsfeld ' Eigenschaft: Beim Doppelklick =CboNextValue() '// ===================================================== Dim cbo As Control Dim lCount As Long On Error GoTo CboNextValue_Err ' Initialisierung CboNextValue = False ' Wenn kein Controlname übergeben wurde, If psCtlName = vbNullString Then ' dann aktuelles Steuerelement ermitteln Set cbo = Screen.ActiveControl Else ' sonst übergebenes Control in der aktuellen ' Form zuweisen Set cbo = Screen.ActiveForm(psCtlName) End If With cbo ' Steuerelement aktivieren .SetFocus ' Ist das Steuerelement überhaupt ein ' Kombinationsfeld? If .ControlType = acComboBox Then ' Haben wir überhaupt Einträge im ' Kombinationsfeld? If .ListCount + .ColumnHeads > 0 Then ' Anzahl der Zeilen abzüglich Kopfzeilen ' ermitteln lCount = .ListCount + .ColumnHeads ' Je nach gewünschte Richtung Select Case plNext ' vorheriger Eintrag Case -1 ' Wenn Listenindex kleiner gleich 0, If .ListIndex <= 0 Then ' dann den letzten Eintrag auswählen .ListIndex = lCount - 1 Else ' sonst vorherigen Eintrag auswählen .ListIndex = .ListIndex + plNext End If ' nächstes Element Case 1 ' Wenn Listindex gleich Anzahl Zeile, If .ListIndex = lCount - 1 Then ' dann ersten Eintrag auswählen .ListIndex = 0 Else ' sonst nächsten Eintrag auswählen .ListIndex = .ListIndex + plNext End If End Select End If End If End With ' alles soweit i.O. CboNextValue = True CboNextValue_Exit: On Error GoTo 0 If Not cbo Is Nothing Then Set cbo = Nothing Exit Function CboNextValue_Err: MsgBox "Fehler " & Err.Number & ": " & _ Err.Description, vbCritical, _ "modForms.CboNextValue" Resume CboNextValue_Exit End Function
Die Verwendung
Die Funktion CboNextValue kann ohne Übergabe eines Namens auf das aktive Steuerelement angewendet werden. Auf dieser Weise muss keine Anpassung des Aufrufs erfolgen, wenn z.B. das Control umbenannt wird. Um die Funktion anzuwenden, brauchen Sie nur bei der Eigenschaft Beim Doppelklick ihres gewünschten Kombinationsfelder =CboNextValue() hinterlegen.
Ein Hinweis zu den Kopfzeilen (ColumnHeads): Kombinationsfelder können auch Kopfzeilen beinhalten. Der Listindex 0 bezieht sich in dem Fall nicht auf die Kopfzeile, sondern
auf den ersten
Eintrag danach. Trotzdem wird die Kopfzeile bei der Eigenschaft ListCount für die Anzahl der Zeilen
in einem Kombinationsfeld mitgezählt. D.h., eine Liste kann leer sein, obwohl die ListCount-Eigenschaft den Wert 1 zurückgibt. Aus diesem Grund wird die wirkliche Anzahl der Einträge abzüglich der Kopfzeile ermittelt. Dabei ist es praktisch, dass
die Eigenschaft ColumnHeads den
Wert -1 (True) annimmt, wenn die Kopfzeile angezeigt wird, und den Wert 0, wenn keine Kopfzeile angezeigt wird. Dieser Umstand wird in der Funktion CboNextValue berücksichtigt.