AW: sortieren der datel in Listbox
20.02.2020 15:42:29
Matthias
Moin!
Hier mal eine Variante zu deinem Code. Um das sortieren im Code zu umgehen, sortiere ich erst dein Blatt speicher die Daten und sortiere es zurück. Damit habe ich die Daten sortierte vorlegen. Dann gehen ich durch die Liste (die Variable daten im Code). Ist es ein Datum, füge ich es normal am Ende ein. Ist es ein Datum wird es am Anfang eingefügt. Dabei merke ich mir in zeile die Anzahl der Texte und füge es dann an der bestimmten Stelle ein. Bei Additem kannst du mit angegeben, an welcher Stelle es eingefügt werden soll. Sieht dann so aus.
Private Sub Listbox1_fuellen()
Dim lngZeile As Long, lngTemp As Long
Dim strTemp As String, strTemp1 As String, strTemp2 As String, strTemp3 As String
Dim ws As Worksheet
Dim ende As Long, daten, zeile As Long
Application.ScreenUpdating = False
Set ws = Worksheets("PROJEKT")
ListBox1.Clear
ListBox1.AddItem
' Überschrift
ListBox1.List(0, 0) = "Komm-Nr"
ListBox1.List(0, 1) = "Datum"
ListBox1.List(0, 2) = "Vorname"
ListBox1.List(0, 3) = "Nachnahme"
' Datensätze
ende = ws.Cells(Rows.Count, 1).End(xlUp).Row
'sortieren
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("O2:O25") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange ws.Range("A1:P25")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
daten = ws.Range("A1:P" & ende)
'sortieren zurück
ws.Sort.SortFields.Clear
ws.Sort.SortFields.Add Key:=ws.Range("A2:A25") _
, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ws.Sort
.SetRange ws.Range("A1:P25")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
'jetzt einelsen
For lngZeile = 2 To ende
If IsDate(daten(lngZeile, 15)) Then 's
If CLng(daten(lngZeile, 15)) CLng(Date) - CLng(vorher) Then
ListBox1.AddItem
lngTemp = ListBox1.ListCount - 2
ListBox1.List(lngTemp + 1, 0) = daten(lngZeile, 1)
ListBox1.List(lngTemp + 1, 1) = daten(lngZeile, 15)
ListBox1.List(lngTemp + 1, 2) = daten(lngZeile, 2) 'Format(ws.Cells( _
lngZeile, 2), "#"".""##"".""###"".""#"".""#") 'WS.Cells(lngZeile, 1)
ListBox1.List(lngTemp + 1, 3) = daten(lngZeile, 3)
End If 's
Else
'Texte
zeile = zeile + 1
ListBox1.AddItem daten(lngZeile, 1), zeile
ListBox1.List(zeile, 1) = daten(lngZeile, 15)
ListBox1.List(zeile, 2) = daten(lngZeile, 2) 'Format(ws.Cells(lngZeile, 2), "#"".""# _
#"".""###"".""#"".""#") 'WS.Cells(lngZeile, 1)
ListBox1.List(zeile, 3) = daten(lngZeile, 3)
End If
Next
End Sub
VG