Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1712to1716
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

Sortierung erweitern.

Sortierung erweitern.
30.09.2019 12:00:01
Thomas
Hallo Excelfreunde,
ich möchte gern eine Listbox nach 3 Kriterien sortieren. Dazu habe ich ein Code aus einer Datei von
XLph genommen und diesen angepasst.
Dieser funktioniert jetzt auch fast so wie ich es gern haben möchte.
Klickt man über eine Spalte ( im Label ) wird diese Spalte dementsprechend sortiert. ( ein Kriterium ) Klickt man in die nächste Spalte so wird auch diese sortiert.( auch wieder ein Kriterium)
Gern würde ich umsetzen:
Klick über die z.B. Spalte = sortiere den Datensatz als Kriterium 1
Klick in die z.B. 2. Spalte = sortiere den Datensatz als Kriterium 2
Klick in die z.B. 4. Spalte = sortiere den Datensatz als Kriterium 4
Um alle Kriterien auf null zusetzen benötige ich kein Button. Da ich die Daten dann einfach wieder neu einlesen kann
Kann mir jemand behilflich bei der Umsetzung sein?
Ich bekomme das einfach nicht umgesetzt.
https://www.herber.de/bbs/user/132288.xlsm
habt schon mal rechtvielen dank für euer Interesse.
mfg thomas

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung erweitern.
30.09.2019 15:12:36
Matthias
Moin!
Lege mal am Anfang noch eine private Variable sortkrit an. ALso die Zeile einfügen.
Private sortkrit As String
Und dann tausche dein MousUpEvent damit.
Private Sub lblSort_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
Dim astrColumnWidth() As String
Dim iastrCW As Long
Dim sngColumnWidth As Single
Dim sngSum As Single
Dim i As Long
Dim lngFieldIndex As Long
Dim kritliste
Dim lngSortOrder As XlSortOrder
'If datenberech.ListRows.Count = 0 Then Exit Sub
Select Case Button
Case 1: lngSortOrder = xlAscending
Case 2: lngSortOrder = xlDescending
Case Else: Exit Sub
End Select
astrColumnWidth() = Split(Replace(ListBox1.ColumnWidths, " Pt", ""), ";")
For iastrCW = LBound(astrColumnWidth) To UBound(astrColumnWidth)
sngColumnWidth = CSng(astrColumnWidth(iastrCW))
sngSum = sngSum + sngColumnWidth
If sngSum >= X Then lngFieldIndex = iastrCW: Exit For
Next
'    If lngFieldIndex > 0 Then
'        With datenberech.Range
'            .Sort .Cells(1, lngFieldIndex + 1), lngSortOrder, Header:=xlYes
'        End With
'       ' Call GetFilterData(Listbox1, lblFilterCount)
'    End If
Dim iLSpalte As Integer ' die letzte belegte Spalte in Zeile 1 'xlAscending xlDescending
Dim lLZeile As Long ' die letzte belegte Zeile in Spalte A
Dim Spaltennummer1
Dim Spaltennummer2
Spaltennummer1 = lngFieldIndex
Dim sortrichtung As Integer
'If aufsteigend = False And absteigend = False Then
'MsgBox " Achtung soll ich absteigend oder austeigend sortieren. Bitt setz den Hacken."
'Exit Sub
'End If
'If absteigend.Value = True Then
sortrichtung = lngSortOrder 'xlDescending
'Spaltennummer1 = CB_suchspalten.ListIndex + 1
'Spaltennummer2 = CB_suchspalten2.ListIndex + 1
MsgBox Spaltennummer1
With Tabelle1
lLZeile = .Cells(Rows.Count, 1).End(xlUp).Row
iLSpalte = .Cells(1, Columns.Count).End(xlToLeft).Column
sortkrit = sortkrit & ";" & Spaltennummer1 & "@" & sortrichtung
'MsgBox CB_suchspalten2.ListIndex
'If CB_suchspalten2.ListIndex = -1 Then
.Sort.SortFields.Clear
kritliste = Split(sortkrit, ";")
For i = 1 To UBound(kritliste)
Debug.Print Split(kritliste(i), "@")(0)
.Sort.SortFields.Add Key:=.Range(.Cells(2, CLng(Split(kritliste(i), "@")(0))), .Cells(lLZeile,  _
CLng(Split(kritliste(i), "@")(0)))), _
SortOn:=xlSortOnValues, Order:=Split(kritliste(i), "@")(1), DataOption:=xlSortNormal
Next
With .Sort
.SetRange Tabelle1.Range(Tabelle1.Cells(1, 1), Tabelle1.Cells(lLZeile, iLSpalte))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub

Hiermit wird die Speicherung gespeichert und neu gesetzt. Ist jett aber nicht auf 3 Durchläufe begrenzt.
VG
Anzeige
besten Dank an Matthias
30.09.2019 15:38:37
Thomas
Hallo Mattias,
das passt perfekt.
Ich baue dies noch heute in meine Hauptdatei ein.
Hab recht vielen vielen dank für deine Unterstützung.
mfg thomas

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige