Hallo Mirco,
Ich würde die Spalte mit nur einer Schleife durchlaufen. Also Jede Stadt mit Application.Match einmal prüfen ob sie bereits im Array vorhanden ist. wenn nicht dann anlegen. Anschließend wird das Array sortiert und der Combobox über die List-Eigenschaft zugewiesen. Bei sehr vielen Städten kann das Sortieren eine weile dauern. Probier mal den folgenden Code aus.
Private Sub UserForm_Initialize()
Dim Stadt As String
Dim i As Long
Dim Staedte()
ReDim Staedte(0)
zeile = 2 'Beginn der ersten Stadt
Do While Cells(zeile, 9) <> "" 'solange eine Stadt existiert
Stadt = Cells(zeile, 9)
If IsError(Application.Match(Stadt, Staedte, False)) Then 'wenn Stadt noch nicht vorhanden dann
ReDim Preserve Staedte(i) 'Stadt anlegen
Staedte(i) = Stadt
i = i + 1
End If
zeile = zeile + 1
Loop
'Array sortieren
QSort Staedte, LBound(Staedte), UBound(Staedte)
'Combobox füllen
Me.cb_Staedte_Auswahl.List = Staedte
End Sub
'Den Sortiercode habe ich von der Website http://www.excel-ist-sexy.de/eindimensionales-array-sortieren/
Sub QSort(aData, a As Long, e As Long)
Dim x As Long, y As Long, vntTmp As Variant, vntPivot As Variant
x = a
y = e
vntPivot = aData((a + e) \ 2)
Do While x <= y
Do While aData(x) < vntPivot
x = x + 1
Loop
Do While aData(y) > vntPivot
y = y - 1
Loop
If x <= y Then
vntTmp = aData(x)
aData(x) = aData(y)
aData(y) = vntTmp
x = x + 1
y = y - 1
End If
Loop
If a < y Then Call QSort(aData, a, y)
If x < e Then Call QSort(aData, x, e)
End Sub
Gruß Mr. K.
|