Combobox Dropdown

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

Betrifft: Combobox Dropdown
von: Marcus
Geschrieben am: 22.09.2015 13:32:13

Hallo zusammen,
ich versuche mich schon seit Tagen ein einem VBA-Code für Comboboxen. Inzwischen habe ich mir etwas zusammbasteln können, hänge aber immer noch an zwei Punkten.
Punkt 1: Ich habe zwei Comboboxen in einer Tabelle, die mir Spalte I und J ab Zeile 31 ohne Leerzeilen und ohne Duplikate sortiert ausgeben. Soweit so gut. Manuell habe ich noch den Eintrag „ALLE“ über .Additem hinzugefügt. Dieser erscheint aber immer an letzter Stelle, nicht an erster. Was mache ich falsch?

Private Sub ComboBoxT1_DropButtonClick()
    Dim objDictionary As Object
    Dim varBereich As Variant
    Dim loZaehler As Long
    Dim arrDaten
    Dim lngLetzte As Long
    Dim iRow As Long, ALetzte As Long
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
        Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
    Set objDictionary = CreateObject("Scripting.Dictionary")
    With ActiveSheet
        varBereich = .Range("I31", .Cells(.Rows.Count, 9).End(xlUp))
     End With
    For loZaehler = LBound(varBereich) To UBound(varBereich)
        objDictionary(varBereich(loZaehler, 1)) = 0
    Next
    arrDaten = objDictionary.keys
    Sort_A_Z_T1 arrDaten, LBound(arrDaten), UBound(arrDaten)
    ComboBoxT1.List = arrDaten
With ComboBoxT1
.AddItem "ALLE"
End With
End Sub
Public Sub Sort_A_Z_T1(SortArray, L, R)
    Dim I, J, x, y
    I = L
    J = R
    x = SortArray((L + R) / 2)
    While (I <= J)
        While (SortArray(I) < x And I < R)
            I = I + 1
        Wend
        While (x < SortArray(J) And J > L)
            J = J - 1
        Wend
        If (I <= J) Then
            y = SortArray(I)
            SortArray(I) = SortArray(J)
            SortArray(J) = y
            I = I + 1
            J = J - 1
        End If
    Wend
    If (L < J) Then Call Sort_A_Z_T1(SortArray, L, J)
    If (I < R) Then Call Sort_A_Z_T1(SortArray, I, R)
End Sub
Punkt 2: Diesen Code verwende ich auch für zwei (oder mehr) Comboboxen innerhalb einer Userform, jedoch ohne den letzten Abschnitt mit .Additem „ALLE“. Auch hier soll z.B. in Combobox1 der Text ab $I$31 und in Combobox2 der Text ab $J$31 ohne Leerzeilen, ohne Duplikate sortiert aufgelistet sein. Das klappt auch, nur sind in Combobox2 auch die Werte aus Combobox1 enthalten. Kann mir hierzu bitte jemand helfen?
Gru0 Marcus

Bild

Betrifft: AW: Combobox Dropdown
von: Rudi Maintaire
Geschrieben am: 22.09.2015 13:46:45
Hallo,
wenn du "ALLE" am Schluss hinzufügst, steht es eben unten.

Private Sub ComboBoxT1_DropButtonClick()
    Dim objDictionary As Object
    Dim varBereich As Variant
    Dim loZaehler As Long
    Dim arrDaten
    Dim lngLetzte As Long
    Dim iRow As Long, ALetzte As Long
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
        Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
    Set objDictionary = CreateObject("Scripting.Dictionary")
    objDictionary("ALLE") = 0
    With ActiveSheet
        varBereich = .Range("I31", .Cells(.Rows.Count, 9).End(xlUp))
     End With
    For loZaehler = LBound(varBereich) To UBound(varBereich)
        objDictionary(varBereich(loZaehler, 1)) = 0
    Next
    arrDaten = objDictionary.keys
    Sort_A_Z_T1 arrDaten, LBound(arrDaten) + 1, UBound(arrDaten)
    ComboBoxT1.List = arrDaten
End Sub
zu 2: Das Dictionary zwischendurch leeren. objDictionary.RemoveAll
Gruß
Rudi

Bild

Betrifft: AW: Combobox Dropdown
von: Marcus
Geschrieben am: 22.09.2015 13:57:41
Hallo Rudi,
das ging ja fix. Passt alles genau so wie ich es wollte. Vielen vielen Dank.
Gruß, Marcus

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Combobox Dropdown"