4-spaltige ListBox sortieren

Outsider77

Erfahrenes Mitglied
Hallo zusammen!
ich möchte eine 4-spaltige ListBox sortieren und habe auch einen Code bereit.
Allerding kommt immer die Fehlermeldung:
Laufzeitfehler 94 - Unzulässige Verwendung von Null.

Code:
Sub listboxen_sortieren(lngUgrenze As Long, lngOgrenze As Long)
Dim lngIndex1 As Long, lngIndex2 As Long, strElement As String
    Dim strZwischenspeicher As String, bytIndex As Byte
    lngIndex1 = lngUgrenze
    lngIndex2 = lngOgrenze
    strZwischenspeicher = UserForm5.ListBox7.List(Fix((lngUgrenze + lngOgrenze) / 2), 0)
    Do
        Do While UserForm5.ListBox7.List(lngIndex1, 0) < strZwischenspeicher
            lngIndex1 = lngIndex1 + 1
        Loop
        Do While strZwischenspeicher < UserForm5.ListBox7.List(lngIndex2, 0)
            lngIndex2 = lngIndex2 - 1
        Loop
        If lngIndex1 <= lngIndex2 Then
            For bytIndex = 0 To 5
                strElement = UserForm5.ListBox7.List(lngIndex1, bytIndex)
                UserForm5.ListBox7.List(lngIndex1, bytIndex) = UserForm5.ListBox7.List(lngIndex2, bytIndex)
                UserForm5.ListBox7.List(lngIndex2, bytIndex) = strElement
            Next
            lngIndex1 = lngIndex1 + 1
            lngIndex2 = lngIndex2 - 1
        End If
    Loop Until lngIndex1 > lngIndex2
    If lngUgrenze < lngIndex2 Then Call listboxen_sortieren(lngUgrenze, lngIndex2)
    If lngIndex1 < lngOgrenze Then Call listboxen_sortieren(lngIndex1, lngOgrenze)
End Sub

Aufgerufen wird mittels
Code:
Call listboxen_sortieren(0, UserForm5.ListBox7.ListCount - 1)

Der Fehler kommt in folgender Zeile:
Code:
strElement = UserForm5.ListBox7.List(lngIndex1, bytIndex)

Hat vielleicht jemand eine Idee? Das wäre super!
Grüße Outi
 

ronaldh

Erfahrenes Mitglied
Das liegt daran, dass die entsprechende Zelle der Listbox leer ist. Und leer heißt nicht Leerzeichen, sondern Null.

Du kannst das abfangen, in dem Du die Zelle auf Null prüfst:

Code:
If Not IsNull( UserForm5.ListBox7.List(lngIndex1, bytIndex)) Then
     strElement = UserForm5.ListBox7.List(lngIndex1, bytIndex)
End If
 

Outsider77

Erfahrenes Mitglied
Oh stimmt. Jetzt wo Du es sagst, fällt mir auf, dass in der LB in der betreffenden Spalte nichts steht.
Danke für die schnelle Hilfe! Da fällt mir noch eine Frage zu dem Thema ein:
wenn ich die Sub mehrmals hintereinander laufen lasse für 6 verschiedene ListBoxen (mit entsprechenden Änderungen des Codes), kommt die Fehlermeldung:
Nicht genügend Stapelspeicher. Kannst Du mir sagen, was das bedeutet und wie ich das verhindern kann?
Gruß Outi
Nachtrag: also was es beudeutet, hab ich mir eben mal durchgelesen. Komisch ist nur, dass die Fehlermeldung nicht erscheint, wenn ich das
in einer anderen Test-File ausprobiere. Dort läuft es ohne Probleme für alle 6 ListBoxen durch.
 
Zuletzt bearbeitet:

mage

Erfahrenes Mitglied
Nich genügend Stapelspeicher bedeutet in der Regel das du eine Endlosschleife gebaut hast.
D.h. deine Schleife kommt nie zum Ende.