Combobox mit Unikaten und alphabetisch sortiert

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

Betrifft: Combobox mit Unikaten und alphabetisch sortiert
von: Tom
Geschrieben am: 24.09.2015 15:40:33

Hallo,
ich habe in einer UserForm die Combobox1 und möchte diese mit Werten aus Spalten füllen, genauer gesagt Unikate und alphabetisch sortiert. Mit welcher Spalte die ComboBox gefüllt wird, hängt davon ab, welcher Radiobutton ausgewählt wurde (insgesamt gibt es 5; RadioButton1 --> Spalte 1/Spalte A, RadioButton2 --> Spalte 2/Spalte B etc.)
Mein Code sieht folgendermaßen aus (für 2 Radiobuttons):

'Radiobutton 1 -> SpaltenZahl muss 1 sein / Spalte A
Sub OptionButton1_Click()
    SpaltenZahl = 1
    
    Dim lngLetzte As Long
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
        Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
        
    If OptionButton1 Then
        Dim BoI As Byte
        ComboBox1.Clear
        With Worksheets("Tabelle1")
            For BoI = 2 To lngLetzte
                ComboBox1.AddItem .Cells(BoI, SpaltenZahl) 'anstelle SpaltenZahl stand vorher  _
hier 1
            Next BoI
        End With
    End If
    
    UserForm_Initialize
    
    ComboBox1.ListIndex = 0
    
End Sub

'Radiobutton 2 -> SapltenZahl muss 2 sein / Spalte B
Sub OptionButton2_Click()
    SpaltenZahl = 2
    
    Dim lngLetzte As Long
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), _
        Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
        
    If OptionButton2 Then
        Dim BoI As Byte
        ComboBox1.Clear
        With Worksheets("Tabelle1")
            For BoI = 2 To lngLetzte
                ComboBox1.AddItem .Cells(BoI, SpaltenZahl) 'anstelle SpaltenZahl stand vorher 2
            Next BoI
        End With
    End If
    
    UserForm_Initialize
    
    ComboBox1.ListIndex = 0 
    
End Sub

'Combobox ohne Duplikate füllen
Public Sub UserForm_Initialize()
Dim objDic As Object
Dim lngZ As Long
 
Set objDic = CreateObject("Scripting.Dictionary")
 
    For lngZ = 2 To Cells(Rows.Count, 1).End(xlUp).Row
      objDic(Cells(lngZ, 1).Value) = 0
    Next
     
    ComboBox1.List = objDic.keys
    
    EintraegeComboboxSortieren
 
End Sub

'Einträge der Combobox1 alphabetisch sortieren
Sub EintraegeComboboxSortieren()
    Dim i_Erster As Integer
    Dim i_Letzter As Integer
    Dim i_Aktuell As Integer
    Dim i_Nächster As Integer
    Dim s_buffer As String
    
    With UserForm1.ComboBox1
        If .ListCount = 0 Then Exit Sub
        i_Erster = 0
        i_Letzter = .ListCount - 1
        For i_Aktuell = i_Erster To i_Letzter
            For i_Nächster = i_Aktuell + 1 To i_Letzter
                If .List(i_Aktuell) > .List(i_Nächster) Then
                    s_buffer = .List(i_Nächster)
                    .List(i_Nächster) = .List(i_Aktuell)
                    .List(i_Aktuell) = s_buffer
                End If
            Next i_Nächster
        Next i_Aktuell
    End With
End Sub

In den Prozeduren Sub OptionButton1_Click() bzw. Sub OptionButton2_Click() habe ich bereits die Konstante "SpaltenZahl" deklariert und an den entsprechenden Stellen eingetragen.
Meine Frage ist nun, wie ich den Wert der Konstante (abhängig vom ausgewählten Radiobutton -> hier 1 oder 2) mit in die Prozedur "UserForm_Initialize" übernehmen kann.
Über Tipps und Verbesserungsvorschläge würde ich mich freuen :-)
Viele Grüße
Tom

Bild

Betrifft: AW: Combobox mit Unikaten und alphabetisch sortiert
von: Rudi Maintaire
Geschrieben am: 24.09.2015 15:51:07
Hallo,
ich würde anstatt der Optionbuttons eine Listbox nehmen. ListStyle= fmListStyleOption. Dann brauchst du anstatt 5 Prozeduren nur noch eine. Als Spaltenzahl Listbox.Listindex+1.
Gruß
Rudi

Bild

Betrifft: AW: Combobox mit Unikaten und alphabetisch sortiert
von: Daniel
Geschrieben am: 24.09.2015 15:51:41
HI
Zellinhalt in eine freie Spalte kopieren
diese Spalte sortieren
in dieser Spalte Duplikate entfernen
Werte aus der Spalte in die Combobox übernehmen.
Spalte leeren
bzw wenn du statt der Radio-Buttons eine List- oder Combobox nimmmst, wird die Programmierung noch einfacher, weil du dann nur ein Makro brauchst und nicht eines für jeden Button.
gruß Daniel

Bild

Betrifft: AW: Combobox mit Unikaten und alphabetisch sortiert
von: Luschi
Geschrieben am: 24.09.2015 16:54:54
Hallo Tom,
dafür wird vom DOT.Net-Framework für Windows das Objekt
CreateObject("System.Collections.SortedList") bereitgestellt und besitzt folgende Kriterien:
- es werden nur Unikate aufgenommen
- die aufgenommenen Einträge werden automatisch sortiert
- Übergabe der Einträge an ein normales Array
- welches dann die Werte für die Combobox bilden
Wenn du ein kleines Beispiel hier hochladest, zeige ich dir, wie das geht.
Gruß von Luschi
aus klein-Paris

Bild

Betrifft: AW: Combobox mit Unikaten und alphabetisch sortiert
von: Tom
Geschrieben am: 28.09.2015 15:58:05
Hallo zusammen,
vielen Dank für eure Tipps!
Hier eine kleine Beispieldatei: https://www.herber.de/bbs/user/100448.xlsm
Grüße
Tom

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Combobox mit Unikaten und alphabetisch sortiert"