Combobox Eingabeprüfung

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm MsgBox
Bild

Betrifft: Combobox Eingabeprüfung
von: Axel W.
Geschrieben am: 15.11.2015 14:16:34

Hallo Excelianer,
trotz langer Suche nach einer Lösung komme ich nicht weiter.
Ich fülle ein Kombinationsfeld in einer Userform mit Daten aus der Spalte A der Tabelle.
Diese Daten (in der Originaltabelle sind das mehrere Hundert Einträge) sind durcheinander und mehrfach vorhanden. Mit Hilfe des Codes aus diesem Forum gelingt mir auch das Füllen des Kombinationsfeldes ohne Duplikate.
Option Explicit

Private Sub cmd_Close_Click()
Unload Me
Worksheets("Tabelle1").Cells(1, 1).Activate
End Sub
Private Sub UserForm_Initialize()
Dim objDic As Object
Dim IngZ As Long
Set objDic = CreateObject("Scripting.Dictionary")
    For IngZ = 2 To Cells(Rows.Count, 1).End(xlUp).Row  'Spalte A (Testdaten)
        objDic(Cells(IngZ, 1).Value) = 0
    Next
Me.cbo_test.List = objDic.keys
'If cbo_test.Value = "" Then
'    MsgBox "Keine Testdaten ausgew‰hlt !!!", vbInformation, "Hinweis ..."
'End If
frm_Test.cbo_test.ListIndex = -1
End Sub

Nun mein Problem. In den Eigenschaften des Kombinationsfeldes habe ich der "Style"- Eigenschaft den Wert "0-frmStyleDropDownCombo" zugewiesen, da ich gern die Möglichkeit nutzen möchte, auch ein "leeres" Kombinationsfeld für eine Eingabe zu haben.
Und das ist das eigentliche Problem. Es funktioniert auch, aber ich kann alles in das Kombinationsfeld eintippen was die Tastatur hergibt und die Liste im Kombinationsfeld ist auch nicht alphabetisch sortiert.
Gibt es eine Möglichkeit, die "Such-Eingabe" im Kombinationsfeld auf die Einträge der Inhalte in der Spalte A zu begrenzen und die Inhalte alphabetisch sortiert in der Auswahl darzustellen?
Ich würde mich sehr freuen, wenn ihr mir weiterhelfen könntet.
Danke im Voraus dafür.
Axel.

Bild

Betrifft: AW: Combobox Eingabeprüfung
von: Tino
Geschrieben am: 15.11.2015 15:31:25
Hallo,
zu Eingabe Begrenzen, maximale Anzahl Zeichen.

Private Sub cbo_test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = IIf(Len(cbo_test.Value) < 10, KeyAscii, 0)
End Sub

zu Einträge sortieren
Private Sub UserForm_Initialize()
Dim objDic As Object, Colec As Collection
Dim IngZ As Long
Set objDic = CreateObject("Scripting.Dictionary")
    For IngZ = 2 To Cells(Rows.Count, 1).End(xlUp).Row  'Spalte A (Testdaten)
        objDic(Cells(IngZ, 1).Value) = 0
    Next
Me.cbo_test.List = QuickSort(objDic.keys, 0, objDic.Count - 1)
cbo_test.ListIndex = -1
End Sub
Function QuickSort(ByRef sArray As Variant, ByVal MinElem As Long, MaxElem As Long)
Dim Mitte As Long
Dim vDummy As Variant
Dim i As Long, j As Long
    If MinElem > MaxElem Then
        Exit Function
    End If
    Mitte = (MinElem + MaxElem) \ 2
    i = MinElem
    j = MaxElem
    Do
        Do While sArray(i) < sArray(Mitte)
            i = i + 1
        Loop
        Do While sArray(j) > sArray(Mitte)
            j = j - 1
        Loop
 
        If i <= j Then
            vDummy = sArray(j)
            sArray(j) = sArray(i)
            sArray(i) = vDummy
            i = i + 1
            j = j - 1
        End If
 
    Loop Until i > j
    QuickSort sArray, MinElem, j
    QuickSort sArray, i, MaxElem
    QuickSort = sArray
End Function


Bild

Betrifft: AW: Combobox Eingabeprüfung
von: Axel W.
Geschrieben am: 15.11.2015 16:26:37
Hallo Tino,
danke dir für die Lösung !!! Funktioniert super.
Noch eine kurze Frage hinterher. Kann man eigentlich in der Codezeile

KeyAscii = IIf(Len(cbo_test.Value) < 10, KeyAscii, 0)

nur bestimmte Zeichen zur Eingabe zulassen?
Ich wünsche dir ein schönes Wochenende.
Beste Grüße,

Bild

Betrifft: AW: Combobox Eingabeprüfung
von: Tino
Geschrieben am: 15.11.2015 16:49:14
Hallo,
man könnte es mal so versuchen. (nicht ausgiebig getestet)

Private Sub cbo_test_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Dim sText$
sText = Left$(cbo_test.Value, cbo_test.SelStart)
sText = sText & Chr(KeyAscii)
sText = sText & Right$(cbo_test.Value, Len(cbo_test) - (cbo_test.SelStart + cbo_test.SelLength)) _
sText = sText & "*"
KeyAscii = IIf(IsNumeric(Application.Match(sText, cbo_test.List, 0)), KeyAscii, 0)
End Sub
Gruß Tino

Bild

Betrifft: AW: Combobox Eingabeprüfung
von: Axel W.
Geschrieben am: 15.11.2015 17:36:01
Hallo Tino,
ich versuche es mal. Muss jetzt leider kurz weg. Gebe aber auf jeden Fall noch eine Antwort.
Beste Grüße,
Axel

Bild

Betrifft: AW: Combobox Eingabeprüfung
von: Axel W.
Geschrieben am: 15.11.2015 18:13:47
Hallo Tino,
ich bin es noch mal.
Dank für deine vielen Tipps. Auch der letzte Tipp funktioniert perfekt.
Vielen Dank !!!
Beste Grüße,
Axel

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Combobox Eingabeprüfung"