Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1732to1736
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox Sortierung umkehren

Listbox Sortierung umkehren
06.01.2020 00:53:56
Curly
Schönen guten Abend,
ich bin hier im Archiv auf einen tollen Code gestoßen, welcher mir eine Listbox sortiert.
Das funktioniert auch alles wunderbar, jedoch wäre es klasse, wenn mir jemand helfen könnte, ein weiteres Argument mit einzubauen. Ich würde gerne noch als Parameter mit übergeben, ob aufsteigend oder absteigend sortiert wird.
https://www.herber.de/forum/archiv/648to652/651080_Listbox_sortieren.html
der Code:
Sub SortBox(cltBox As Control, intSpalten As Integer, _
intSpalte As Integer, Optional bytWie As Byte = 1)
' So DIS 28.04.05
' SortBox sortiert nicht gebundene List- und Comboboxen. Gebundene List- und Comboboxen
' (Angabe bei RowSource oder ListFillRange) können nicht sortiert werden.
' cltBox     : Name der Listbox die sortiert werden soll.
' intSpalten : Wieviele Spalten sollen mit sortiert werden. Sollte der Anzahl der Spalten
'              in der Listbox entsprechen
' intSpalte  : Nach welcher Spalte soll sortiert werden.
' bytWie     : 1 oder Nicht angegeben als Text
'            : 2 als Zahl, dann muß die ganze Spalte Zahlen enthalten.
'            : 3 als Datum, dann muß die ganze Spalte Datumwerte enthalten.
' Aufruf zum Beispiel so: ListBox1 mit 7 Spalten, Sortierung nach Spalte 1 Sortierordnung Text
' SortBox ListBox1, 7, 1  oder SortBox ListBox1, 7, 1, 1
' Oder so    : Listbox17 mit 2 Spalten, Sortierung nach Spalte 2 Sortierordnung Zahlen
' SortBox ListBox17, 2, 2, 2
Dim intLast As Integer, intNext As Integer, intCounter As Integer, intFehler As Integer
Dim strTmp As String, strFehlertext As String
Dim variLast As Variant, variNext As Variant
On Error GoTo Errorhandler
intFehler = 0
With cltBox
For intLast = 0 To .ListCount - 1
For intNext = intLast + 1 To .ListCount - 1
Select Case bytWie
Case 1
intFehler = 0
variLast = CStr(.List(intLast, intSpalte - 1))
variNext = CStr(.List(intNext, intSpalte - 1))
Case 2
intFehler = 1
variLast = CDbl(.List(intLast, intSpalte - 1))
variNext = CDbl(.List(intNext, intSpalte - 1))
Case 3
intFehler = 2
variLast = CDate(.List(intLast, intSpalte - 1))
variNext = CDate(.List(intNext, intSpalte - 1))
End Select
intFehler = 0
If variLast > variNext Then
For intCounter = 0 To intSpalten - 1
strTmp = CStr(.List(intLast, intCounter))
.List(intLast, intCounter) = CStr(.List(intNext, intCounter))
.List(intNext, intCounter) = strTmp
Next intCounter
End If
Next intNext
Next intLast
End With
Exit Sub
Errorhandler:
Select Case intFehler
Case 0
strFehlertext = "In der Listbox Sortierung ist ein Fehler aufgetreten !"
Case 1
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Zahlen !"
Case 2
strFehlertext = "Nicht alle Werte in der zu sortierenden Spalte sind Datumswerte !"
Case Else
strFehlertext = "Unerwarteter Fehler !"
End Select
MsgBox strFehlertext & " Bitte informieren Sie 'So' ! " & vbCr & vbCr & _
"Fehler aufgetreten in " & cltBox.Name & " !" & vbCr & _
"Fehlernummer = " & Err.Number & vbCr & _
"Fehlerbeschreibung = " & Err.Description & vbCr & _
"Fehlersource = " & Err.Source, vbCritical, " Meldung vom Makro SortBox !"
End Sub
Vielen Dank
Curly

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Sortierung umkehren
06.01.2020 08:10:48
Torsten
Hallo Curly,
ich denke, du brauchst dann 2 Makros.
Oder ein weiteres Select Case ueber einen Optionbutton oder so.
Um absteigend zu sortieren, muss du diese Zeile aendern:

For intLast = 0 To .ListCount - 1

in

For intLast = .ListCount - 1 to 0 Step - 1

Gruss Torsten
AW: Listbox Sortierung umkehren
06.01.2020 10:08:15
Curly
Hallo Thorsten,
dein Lösungsvorschlag bringt leider das gleiche Ergebnis, jedoch muss man öfters klicken bis er die Liste komplett sortiert hat.
Ein weiterer Punkt , welcher mit aufgefallen ist bei "sortieren" nach Text, wird anscheint nur der erste Buchstabe beachtet, d.h. das z.b "Dorint" vor "Dabi" kommt.
Gruß & vielen Dank
Curly
Anzeige
AW: Listbox Sortierung umkehren
06.01.2020 10:13:23
Curly
"Ein weiterer Punkt , welcher mit aufgefallen ist bei "sortieren" nach Text, wird anscheint nur der erste Buchstabe beachtet, d.h. das z.b "Dorint" vor "Dabi" kommt."
Hat sich erleidgt, dieser "Fehler" kam, weil der er groß und Kleinschreibung beachtet.
Und ich Dorint komplett groß geschrieben hatte ...
AW: Listbox Sortierung umkehren
06.01.2020 14:38:09
Nepumuk
Hallo Curly,
ich hab dir mal was programmiert:
https://www.herber.de/bbs/user/134203.xlsm
Deine Fehlerbehandlung musst du selber einbauen.
Gruß
Nepumuk
AW: Listbox Sortierung umkehren
06.01.2020 21:26:42
Curly
Hallo Nepumuk,
vielen dank , eingebaut, getestet , läuft. Danke Danke Dank
Ich hätte noch eine Frage, ich möchte eine Spalte mit Datum's sortieren, allerdings sind hier leere Zellen dabei, kann man das irgendwie noch einstellen, dass das auch funktioniert?
Danke schönen Abend.
Gruß Curly
Anzeige
AW: Listbox Sortierung umkehren
07.01.2020 07:56:04
Nepumuk
Hallo Curly,
was passt da nicht?
Gruß
Nepumuk
AW: Listbox Sortierung umkehren
07.01.2020 16:27:16
Curly
Hi,
wenn bei den Datum's eine Leere Zeile ist kommt ein Laufzeitfehler 13 und er markiert die Zeile vntBuffer = CDate(pravntArray((pvlngLbound + pvlngUbound) \ 2, pvlngSortColumn))
In deinem Beispiel funktioniert es tadellos.
Die Datum's bzw Leere Zeilen kommen allerdings über eine Matrix-formel auf das Tabellenblatt.
Allerdings auch wenn ich es kopiere und als Werte wieder einfüge bleibt der Fehler weiterhin bestehen.
AW: Listbox Sortierung umkehren
07.01.2020 16:36:41
Nepumuk
Hallo Curly,
dann muss du den Fehler abfangen.
Teste mal:
If Not IsDate(pravntArray((pvlngLbound + pvlngUbound) \ 2, pvlngSortColumn)) Then _
    pravntArray((pvlngLbound + pvlngUbound) \ 2, pvlngSortColumn) = Empty

vntBuffer = CDate(pravntArray((pvlngLbound + pvlngUbound) \ 2, pvlngSortColumn))

Wobei ich dazu tendieren würde das direkt nach dem füllen der ListBox zu machen.
Gruß
Nepumuk
Anzeige
AW: Listbox Sortierung umkehren
07.01.2020 16:43:32
Curly
Wie kann man das richtig machen, nach dem befüllen, da jetzt der nächste Laufzeitfehler bei

Do While CDate(pravntArray(lngIndex1, pvlngSortColumn)) 
kommt
AW: Listbox Sortierung umkehren
07.01.2020 16:53:01
Nepumuk
Hallo Curly,
würde ich so machen:
Private Sub UserForm_Initialize()
    Dim lngIndex As Long
    With Tabelle1
        ListBox1.List = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(xlUp)).Value
    End With
    With ListBox1
        For lngIndex = 0 To .ListCount - 1
            If Not IsDate(.List(lngIndex, 1)) Then .List(lngIndex, 1) = Empty
        Next
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: Listbox Sortierung umkehren
07.01.2020 17:05:34
Nepumuk
Hallo Curly,
das klappt nicht. Ich muss weiter testen.
Ok, so geht's:
Private Sub UserForm_Initialize()
    Dim avntValues As Variant
    Dim ialngIndex As Long
    With Tabelle1
        avntValues = .Range(.Cells(2, 1), .Cells(.Rows.Count, 3).End(xlUp)).Value
    End With
    For ialngIndex = LBound(avntValues) To UBound(avntValues)
        If Not IsDate(avntValues(ialngIndex, 2)) Then avntValues(ialngIndex, 2) = Empty
    Next
    ListBox1.List = avntValues
End Sub

Gruß
Nepumuk
Anzeige
AW: Listbox Sortierung umkehren
07.01.2020 17:42:49
Curly
Danke Nepumuk,
Werde ich morgen Früh gleich testen und mich wieder melden, ansonsten suche ich mir eine Möglichkeit um es ohne die Array Formel angezeigt zu bekommen.
Denke eh fast das ist die bessere / schneller und saubere Lösung.
Bis morgen , schönen Abend
Curly
AW: Listbox Sortierung umkehren
08.01.2020 07:37:37
Curly
Guten Morgen Nepumuk,
mit deinem neuen Code , funktioniert auch meine Matrix Spalte.
jetzt läuft alles so , wie ich es mir gewünscht habe.
Vielen Vielen Dank für deine Ausdauer/Geduld und Unterstützung.
Curly

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige