Microsoft Excel

Herbers Excel/VBA-Archiv

Combobox ohne doppelte eionträge | Herbers Excel-Forum


Betrifft: Combobox ohne doppelte eionträge von: fritz
Geschrieben am: 13.02.2012 16:18:50

Hallo zusammen,
ich habe ein problöem beim Befüllen einer Combobox welche sich in einer userform befindet.
beim betätigen einer combobox akteviere ich folgenden code

Sub Analyse_befüllen()
With UserForm5.ComboBox14
For i = 4 To Worksheets("Tabelle1").UsedRange.Rows.Count
If Rows(i).Hidden = False Then
.AddItem Cells(i, 2).Value
End If
Next i
End With
End Sub

dabei werden mir dir daten der spalte b in die combox eingelesen. das funktioniert auch einwandfrei. würde aber jetzt gerne den code abändern das jeder datensatz nur einmal und in alphabetischer reihenfolge eingelesen wird.

danke

  

Betrifft: AW: Combobox ohne doppelte eionträge von: Rudi Maintaire
Geschrieben am: 13.02.2012 16:36:00

Hallo,

Sub Analyse_befüllen()
  Dim oListe As Object, arrListe, i As Long
  Set oListe = CreateObject("Scripting.dictionary")
  For i = 4 To Worksheets("Tabelle1").UsedRange.Rows.Count
    If Rows(i).Hidden = False Then
      oListe(Cells(i, 2).Value) = 0
    End If
  Next i
  arrListe = oListe.keys
  QuickSort arrListe
  UserForm5.ComboBox14.List = arrListe
End Sub

Sub QuickSort(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
    On Error Resume Next
    Dim UnterGrenze As Long, OberGrenze As Long
    Dim AktuellerWert, GemerkterWert As Variant
    If IsMissing(ErsteZeile) Then
        ErsteZeile = LBound(DasArray, 1)
    End If
    If IsMissing(LetzteZeile) Then
        LetzteZeile = UBound(DasArray, 1)
    End If
    UnterGrenze = ErsteZeile
    OberGrenze = LetzteZeile
    AktuellerWert = DasArray((ErsteZeile + LetzteZeile) / 2)
    Do While (UnterGrenze <= OberGrenze)
        Do While (DasArray(UnterGrenze) < AktuellerWert And UnterGrenze < LetzteZeile)
            UnterGrenze = UnterGrenze + 1
        Loop
        Do While (DasArray(OberGrenze) > AktuellerWert And OberGrenze > ErsteZeile)
            OberGrenze = OberGrenze - 1
        Loop
        If (UnterGrenze <= OberGrenze) Then
            GemerkterWert = DasArray(UnterGrenze)
            DasArray(UnterGrenze) = DasArray(OberGrenze)
            DasArray(OberGrenze) = GemerkterWert
            UnterGrenze = UnterGrenze + 1
            OberGrenze = OberGrenze - 1
        End If
    Loop
    If (OberGrenze > ErsteZeile) Then Call QuickSort(DasArray, ErsteZeile, OberGrenze)
    If (UnterGrenze < LetzteZeile) Then Call QuickSort(DasArray, UnterGrenze, LetzteZeile)
End Sub

Gruß
Rudi


  

Betrifft: AW: Combobox ohne doppelte eionträge von: fritz
Geschrieben am: 13.02.2012 16:45:51

Wau. Danke Rudi funktioniert super


  

Betrifft: AW: Combobox ohne doppelte eionträge von: fritz
Geschrieben am: 13.02.2012 17:48:35

Wau. Danke Rudi funktioniert super


Beiträge aus den Excel-Beispielen zum Thema "Combobox ohne doppelte eionträge"