Collection sortieren

Yoah

Erfahrenes Mitglied
Hi @ all!

Bin hier neu und habe direkt mal eine gezielte Frage an euch!

Wie sortiere ich eine Collection?
In dieser Collection habe ich eine ganze Menge Wörter abgelegt,
nun möchte ich die Collection sortieren.

Code:
Sub Sort()
Dim Tmp 
Dim i, j   
 For i = 1 To WordList.count
    For j = WordList.count To (i + 1) Step -1
        If WordList.Item(i) > WordList.Item(j) Then
            Tmp = WordList.Item(i)
            WordList.Item(i) = WordList.Item(j)
            WordList.Item(j) = Tmp
        End If
     Next j
 Next i
End Sub

So sieht mein Code im Moment aus!
Nur gibt er mir bei der Zeile WordList.Item(i) = WordList.Item(j)
eine Fehlermeldung aus, die lautet: Run-Time-Error '424' Object required
Ich hoffe ihr könnt mir da weidter helfen!

Achja, noch was, wenn ich schon mal dabei bin:
Kann man im gleichen Zug, doppelte Einträge löschen?

ThanX!
 
Code:
Sub Sort()
   Dim Tmp 
   Dim i, j   
    For i = 1 To WordList.count
       For j = WordList.count To (i + 1) Step -1
           If WordList.Item(i) > WordList.Item(j) Then
               Tmp = WordList.Item(i)
               WordList.Item(i) = WordList.Item(j)
               WordList.Item(j) = Tmp
           End If
        Next j
    Next i
   End Sub

So sieht mein Code im Moment aus!

Du musst in deine If Funktion noch eine zweite bedingung einbauen! Sonst prüft er ja auch ob z.B. WordList.Item(5) gleich WordList.Item(5) ist! Verstehst du!

Du musst also noch
Code:
and i <> j
anhängen!

das ganze sähe dann so aus:

Code:
Sub Sort()
    Dim Tmp 
    Dim i, j   
     For i = 1 To WordList.count
        For j = WordList.count To (i + 1) Step -1
            If WordList.Item(i) > WordList.Item(j) and i <> j Then
                Tmp = WordList.Item(i)
                WordList.Item(i) = WordList.Item(j)
                WordList.Item(j) = Tmp
            End If
         Next j
     Next i
    End Sub

P.S.: Ist das Absicht das du für deine Variablen keine Datentypen vergibst?
 
Zuletzt bearbeitet:
Hi !

Ich habe es mal so geändert, wie du gesagt hast,
allerdings ist das noch nicht ganz das Problem.
WordList ist eine Collection und irgendwie nimmt er
den = operator nicht, keine Ahnung, warum.
Hilf mir doch nochmal auf die Sprünge!
 
Nun ja ich weiß nicht ganz was du damit meinst, dass das eine Collection sei.

Mein einziger Vorschlag wäre vielleicht mal die gesamte WordList in ein Array zu schreiben und anstatt der WordList selbst das Array in den Code einzubinden! Damit sollte er keine Probleme machen da er schließlich keine Probleme hat den einen Bestandteil in die tmp Variable zu schreiben. Ansonsten fällt mich nichts dazu ein!
 
Ach mir ist doch noch was eingefallen! Anstatt in der 2. For-Schleife die drei Zeilen zu schreiben, schreib doch einfach mal eine tauschen-Funktion! Sieht dann in etwa so aus:

Code:
Public Sub tauschen(ByRef Expression1 As Variant, ByRef Expression2 As Variant)
 	Dim merken As Variant
 
 	merken = Expression1
 	Expression1 = Expression2
 	Expression2 = merken
 
 End Sub
 
Private Sub SortCollection()

Dim col As New Collection
Dim item1 As Variant
Dim item2 As Variant

Dim i As Long, j As Long

col.Add "test3"
col.Add "test1"
col.Add "test2"

For i = 1 To col.Count
For j = i + 1 To col.Count

item1 = col.Item(i)
item2 = col.Item(j)

If StrComp(item1, item2, vbTextCompare) = 1 Then

col.Add item2, , i
col.Remove j + 1

End If
Next j
Next i

Debug.Print "ok"

End Sub
 
Hallo,

Eine mögliche Alternativ wäre auch, die Werte in ein ListBox zu kopieren und dort zu sortieren.

' ausfüllen
lbListe.additem "test 2"
lbListe.additem "test 1"
lbListe.additem "test 3"

' sortieren
lbListe.Sorted = True

' lesen
for i = 1 to lbListe.ListCount -1
debug.print lbListe.List(i)
next i
 
Zurück