AW: Listbox sortieren
18.03.2007 22:16:28
proxima05
Mit dem folgenden Code sollte es gehen (Datenbereich und Spaltenanzahl noch festlegen)
Private Sub UserForm_Activate()
Dim i As Integer
Dim varArray
With Worksheets("HIER-MUSS-NOCH-ETWAS-REIN")
varArray = .Range("A1:Z100")
End With
Call QuickSort(1, UBound(varArray), varArray)
With UserForm1
.ComboBox1.ColumnCount = 2
.ComboBox1.ColumnWidths = "35 pt;82 pt"
.ComboBox1.List = varArray
'Leereinträge aus Tabelle Spalte AF in Combobox-Auswahlliste löschen
For i = .ComboBox1.ListCount - 1 To 0 Step -1
If .ComboBox1.List(i, 0) = "" Then
.ComboBox1.RemoveItem (i)
End If
Next i
.ComboBox1.ListIndex = -1 'normal ist 0, mit "-1" wird die CBox beim Initialisieren
'ohne Inhalt angezeigt.
End With
End Sub
Private Sub QuickSort(lngUgrenze As Long, lngOgrenze As Long, varFeld)
Dim lngIndex1 As Long, lngIndex2 As Long, varElement As Variant, varSpeicher As Variant, intSpalte As Integer
lngIndex1 = lngUgrenze
lngIndex2 = lngOgrenze
varSpeicher = varFeld(((lngUgrenze + lngOgrenze) / 2) \ 1, 1) 'der Wert hinter dem Komma ist die Spalte die sortiert wird
Do
Do While varFeld(lngIndex1, 1) < varSpeicher 'der Wert hinter dem Komma ist die Spalte die sortiert wird
lngIndex1 = lngIndex1 + 1
Loop
Do While varSpeicher < varFeld(lngIndex2, 1) 'der Wert hinter dem Komma ist die Spalte die sortiert wird
lngIndex2 = lngIndex2 - 1
Loop
If lngIndex1 <= lngIndex2 Then
For intSpalte = 1 To 2 '2 Spalten übertragen
varElement = varFeld(lngIndex1, intSpalte)
varFeld(lngIndex1, intSpalte) = varFeld(lngIndex2, intSpalte)
varFeld(lngIndex2, intSpalte) = varElement
Next
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngUgrenze < lngIndex2 Then Call QuickSort(lngUgrenze, lngIndex2, varFeld)
If lngIndex1 < lngOgrenze Then Call QuickSort(lngIndex1, lngOgrenze, varFeld)
End Sub
===============================================
Gruß
Ralph