ComboBox sortieren .... Frage zu QuickSort
31.10.2006 21:38:23
proxima05
Es geht um das aufsteigende Sortieren des Inhalts einer ComboBox in einem UF. Über den folgenden Code fülle ich eine ComboBox, was auch trefflich funktioniert (dank Unterstützung von hier).
========================================
Private Sub Type_of_Bond_Enter()
Type_of_BondFuellen Type_of_Bond, ActiveWorkbook.Worksheets("Cash Flow").Range("AC19:AC28")
End Sub
========================================
========================================
Private Sub Type_of_BondFuellen(CBox As ComboBox, Bereich As Range)
'Laden der Daten aus dem Bereich in die ComboBox, leere Zellen werden übersprungen
With CBox
.Clear
For Each Zelle In Bereich
If Zelle.Value <> "" Then
.AddItem (Zelle.Value)
End If
Next Zelle
End With
End Sub
========================================
Da die Listeinträge in der Range nicht alphabetisch oder sonst irgendwie sortiert sind (meistens ist es Text), erscheinen sie auch unsortiert in der ComboBox. Bei der Recherche bin ich dann auf die QuickSort-Funktion gestossen. Über diese würde ich die Liste in einer Array-Variablen sortieren lassen, da die Tabelle selbst nicht sortiert werden soll.
Das Array würde ich mit der folgenden Routine sortieren:
**************************************************
Sub SortArray()
Dim I As Variant
For I = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
myArray(I) = Worksheets("Cash Flow").Range("AC19:AC28")
Next I
Call QuickSort(myArray)
For I = ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Worksheets("Cash Flow").Range("AC19:AC28") = myArray(I)
Next I
End Sub
**************************************************
.... und hier die Routine für Quicksort
**************************************************
Sub QuickSort(VA_array, Optional V_Low1, Optional V_high1)
On Error Resume Next
Dim V_Low2, V_high2, V_loop As Integer
Dim V_val1, V_val2 As Variant
If IsMissing(V_Low1) Then
V_Low1 = LBound(VA_array, 1)
End If
If IsMissing(V_high1) Then
V_high1 = UBound(VA_array, 1)
End If
V_Low2 = V_Low1
V_high2 = V_high1
V_val1 = VA_array((V_Low1 + V_high1) / 2)
While (V_Low2 While (VA_array(V_Low2) V_Low2 = V_Low2 + 1
Wend
While (VA_array(V_high2) > V_val1 And V_high2 > V_Low1)
V_high2 = V_high2 - 1
Wend
If (V_Low2 V_val2 = VA_array(V_Low2)
VA_array(V_Low2) = VA_array(V_high2)
VA_array(V_high2) = V_val2
V_Low2 = V_Low2 + 1
V_high2 = V_high2 - 1
End If
Wend
If (V_high2 > V_Low1) Then Call QuickSort(VA_array, V_Low1,
V_high2)
If (V_Low2 V_high1)
End Sub
**************************************************
Kann das so funktionieren und wo im VBA-Code schreibe ich das hin. Innerhalb der Routinen für die jeweilige ComboBox?
Hoffe mir kann da jemand helfen.
Allerbesten Dank.
Ralph
Anzeige