AW: ComboBox schneller sortieren
23.09.2009 12:42:30
Tino
Hallo,
teste mal diese Version
Beispiel
Option Explicit
Sub Beispiel()
Dim MeinArray()
MeinArray = Kundenauftrag.ComboBox8.List
prcQuickSort Lbound(MeinArray), Ubound(MeinArray), 0, True, MeinArray
Kundenauftrag.ComboBox8.List = MeinArray
End Sub
kommt als Code in Modul
Option Explicit
' Code Max Kaffl 2005
Sub prcQuickSort(lngLbound As Long, lngUbound As Long, _
intSortColumn As Integer, bntSortKey As Boolean, vntArray() As Variant)
Dim intIndex As Integer
Dim lngIndex1 As Long, lngIndex2 As Long
Dim vntTemp As Variant, vntBuffer As Variant
lngIndex1 = lngLbound
lngIndex2 = lngUbound
vntBuffer = vntArray((lngLbound + lngUbound) \ 2, intSortColumn)
Do
If bntSortKey Then
Do While vntArray(lngIndex1, intSortColumn) < vntBuffer
lngIndex1 = lngIndex1 + 1
Loop
Do While vntBuffer < vntArray(lngIndex2, intSortColumn)
lngIndex2 = lngIndex2 - 1
Loop
Else
Do While vntArray(lngIndex1, intSortColumn) > vntBuffer
lngIndex1 = lngIndex1 + 1
Loop
Do While vntBuffer > vntArray(lngIndex2, intSortColumn)
lngIndex2 = lngIndex2 - 1
Loop
End If
If lngIndex1 < lngIndex2 Then
If vntArray(lngIndex1, intSortColumn) <> _
vntArray(lngIndex2, intSortColumn) Then
For intIndex = Lbound(vntArray, 2) To Ubound(vntArray, 2)
vntTemp = vntArray(lngIndex1, intIndex)
vntArray(lngIndex1, intIndex) = _
vntArray(lngIndex2, intIndex)
vntArray(lngIndex2, intIndex) = vntTemp
Next
End If
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
ElseIf lngIndex1 = lngIndex2 Then
lngIndex1 = lngIndex1 + 1
lngIndex2 = lngIndex2 - 1
End If
Loop Until lngIndex1 > lngIndex2
If lngLbound < lngIndex2 Then Call prcQuickSort(lngLbound, _
lngIndex2, intSortColumn, bntSortKey, vntArray())
If lngIndex1 < lngUbound Then Call prcQuickSort(lngIndex1, _
lngUbound, intSortColumn, bntSortKey, vntArray())
End Sub
Gruß Tino