Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1796to1800
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Combobox w/o Duplikate+Sort+Variabel

Combobox w/o Duplikate+Sort+Variabel
08.12.2020 11:26:12
ChrisSPL
Hallo zusammen,
ich verwende aktuell folgenden Code um eine Combobox ohne Duplikate zu befüllen:

Private Sub UserForm_Initialize()
Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("BLA")
Dim lRow As Long
With wsSheet
For lRow = 2 To .Cells(.Rows.Count, 7).End(xlUp).Row
If WorksheetFunction.CountIf(.Range("G2:G" & CStr(lRow)), Cells(lRow, 7)) = 1 Then
Combobox1.AddItem .Cells(lRow, 7).Text
End If
Next
End With
End Sub

Der Code bezieht sich pauschal auf Spalte G bzw. 7, das Einzulesende fällt unter Textformat.
Nun möchte ich den Spaltenbezug variable gestalten und die Liste noch sortieren, komme aber einfach nicht klar mit vorhandenen Codes im Netz und selbst kann ich es einfach nicht selbst schreiben...
Grundsätzlich geht es darum, dass statt G(Spalte 7) es die Spalte anspricht deren Überschrift (Zeile 1) in einer anderen Combobox ("Combobox2") angewählt wird.
D.h. Value von Combobox 2 muss innerhalb des Tabellenblatts (wsSheet) in Zeile 1:1 gesucht werden und dann die entsprechende Spalte ab Zeile 2 bis letzte Zeile (("X2:X" & CStr(lRow)) eingelesen werden - dies ohne Duplikate und sortiert.
Ich hoffe sehr auf eine hilfswilligen Profi, hab mir diesen "einfach Vorgang" nicht so schwer umsetzbar vorgestellt. Im Netz gibts schon alleine zig Varianten für das Sortieren, z.B. als Array oder mit Hilfsspalte die dann wieder gelöscht wird - ich kriege aber einfach nicht hin ...
Vielen lieben Dank im Voraus und schöne Grüße,
Chris

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox w/o Duplikate+Sort+Variabel
08.12.2020 12:10:41
Daniel
Hi
die Spalte müsstest du suchen und die Spaltennummer in einer Variable ablegen.
Sortierte Duplikatfreie List- oder Comboboxlisten kann man relativ einfach erstellen, weil man mit AddItem den Eintrag nicht nur am Ende, sondern auch an einer bestimmten Postition einfügen kann.
dh mal läuft mit einer zusätzlichen Schleife durch die bereits vorhanden Einträge und ermittelt, ab wann die vorhandenen Einträge größer werden als der Zellwert, an dieser Stelle muss dann der der Zellwert in die Liste:
With wsheet
ComboBox1.Clear
If ComboBox2.ListIndex >= 0 Then
sp = .Rows.Find(what:=ComboBox2.Text, lookat:=xlWhole).Column
For Z = 2 To .Cells(Rows.Count, sp).End(xlUp).Row
For L = 0 To ComboBox1.ListCount - 1
If ComboBox1.List(L) = Cells(Z, sp) Then
L = ListBox1.ListCount + 1
Exit For
ElseIf .Cells(Z, sp) 
das ganze muss dann aber über die Combobox2 ausgelöst werden und nicht im Initialize-Event.
Gruß Daniel
Anzeige
AW: Combobox w/o Duplikate+Sort+Variabel
08.12.2020 12:25:10
Nepumuk
Hallo Chris,
teste mal:
Private Sub ComboBox2_Change()
    
    Dim objCell As Range
    Dim objWorksheet As Worksheet
    Dim objArrayList As Object
    Dim avntvalues As Variant
    Dim ialngIndex As Long
    
    Set objWorksheet = ThisWorkbook.Worksheets("BLA")
    
    Set objCell = objWorksheet.Rows(1).Find(What:=ComboBox2.Text, _
        LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=True)
    
    If Not objCell Is Nothing Then
        
        Set objArrayList = CreateObject("System.Collections.ArrayList")
        
        With objWorksheet
            
            avntvalues = .Range(.Cells(2, objCell.Column), _
                .Cells(.Rows.Count, objCell.Column).End(xlUp)).Value2
            
        End With
        
        For ialngIndex = LBound(avntvalues, 1) To UBound(avntvalues, 1)
            
            If Not objArrayList.Contains(avntvalues(ialngIndex, 1)) Then _
                Call objArrayList.Add(avntvalues(ialngIndex, 1))
            
        Next
        
        Call objArrayList.Sort
        
        ComboBox1.List = objArrayList.ToArray
        
        Set objArrayList = Nothing
        Set objCell = Nothing
        
    Else
        
        Call ComboBox1.Clear
        
        Call MsgBox("Überschrift nicht gefunden.", vbExclamation, "Hinweis")
        
    End If
    
    Set objWorksheet = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Combobox w/o Duplikate+Sort+Variabel
08.12.2020 14:04:02
ChrisSPL
Hallo Daniel, hallo Nepumuk,
vielen Dank für eure beiden Lösungen, habe beide getestet und beide funktionieren tadellos.
Ihr habt mir wirklich sehr weitergeholfen!!!
Schöne Grüße,
Chris

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige