Listbox - doppelte Werte löschen

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Curare.

    Listbox - doppelte Werte löschen

    Kann mir jemand sagen warum ich bei dieser Anweisung einen Fehler bekomme:
    For i = 1 To ListBox1.ListCount
    For j = 2 To ListBox1.ListCount
    If ListBox1.List(i) = ListBox1.List(j) Then
    ListBox1.RemoveItem j
    End If
    Next j
    Next i

    Fehler: Laufzeitfehler '381': Eigenschaft List konnte nicht abgreufen werden. Index des Eigenschaftsfelds ungültig.

    Dabei funktioniert es so einwandfrei:
    For i = Listbox1.ListCount - 1 To 1 Step -1
    If Listbox1.List(i) = Listbox1.List(i - 1) Then
    Listbox1.RemoveItem i
    End If
    Next i

    Aber hier muss ich die Listbox vorher sortieren und der Befehl Listbox1.sorted=True (Public Property Sorted As Boolean) klappt nicht.

    Übrigens arbeite ich mit excel 2010

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Curare“ ()

    Im ersten Beispiel wird die Liste durchlaufen und während des durchlaufen gegebenenfalls ein Eintrag gelöscht womit die Liste einen Eintrag weniger hat, sich also geändert hat -> Das macht die For-Schleife nicht mit (soweit ich das noch in Erinnerung habe :D ).

    Ein evtl. andere Herangehensweise ist es schon beim füllen der Listbox doppelte Einträge zu erkennen, dann müssen diese im nachhinein nicht gelöscht werden ... (Hängt halt davon ab was gemacht werden soll)
    -> mal nach "vba listbox doppelte Einträge vermeiden" in Google suchen
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Ja du hast Recht, das mit den For-Schleifen habe ich gar nicht beachtet -.-

    Also die doppelten Einträge sollten in der Excel-Tabelle stehen bleiben und auch in die Listbox übernommen werden. Allerdings brauche ich die in der Listbox nur einmal.
    Hast du vllt eine Idee wie ich diese Liste sortieren könnte? Dann würde das ja mit der zweiten Methode klappen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Benutz die Listbox nicht um die Daten zu speichern, nimm intern eine List(Of String).
    Von dieser Liste kannst du die Funktion ".Distinct()" aufrufen welche dir eine weitere Liste zurückgibt (in der jedoch alle Mehrfach-Einträge auf einen reduziert wurden).
    Hallo Curare,
    du brauchst nichts zu sortieren.
    Probier' mal das:

    Visual Basic-Quellcode

    1. Dim i As Long, j As Long
    2. With List1
    3. .Visible = False
    4. For i = .ListCount - 2 To 0 Step -1
    5. For j = .ListCount - 1 To i + 1 Step -1
    6. If .List(i) = .List(j) Then .RemoveItem j
    7. Next j
    8. Next i
    9. .Visible = True
    10. End With
    Gruss,

    Neptun
    Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

    Das hat richtig gut geklappt! Hätte ich auch selber drauf kommen können, aber manchmal sieht man gewisse Sachen einfach nicht :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()