Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1632to1636
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 sortieren

Listbox sortieren
06.07.2018 22:08:43
Sabrina
Hallo Leute,
ich lasse eine Listbox über den Wert mit den Daten aus 3 Dateien füllen
Das funktioniert wunderbar.
Nun meine Frage, kann man die Liste nach dem Datum absteigend sortieren lassen?
LG
Sabbel
Private Sub FillList()
Dim arch, rng, var As Range
Dim Zahl, wert As Long
Dim tFirst, sFirst, GeNr As String
Dim Max, i As Integer
ListBox2.Clear
ListBox1.AddItem
ListBox1.List(i, 0) = "Hersteller"
ListBox1.List(i, 1) = "| Typ"
ListBox1.List(i, 2) = "| Seriennummer"
ListBox1.List(i, 3) = "| Datum"
ListBox1.List(i, 4) = "| Kosten"
ListBox1.List(i, 5) = "| Auftragsnummer"
'  Auftrag
Set rng = Workbooks("Auftrag.xls").Worksheets("Daten").Range("C:C") _
.Find(What:=txtSearch, LookIn:=xlValues, LookAt:=xlPart, After:=Range("C15000"))
If Not rng Is Nothing Then
sFirst = rng.Address
ListBox2.AddItem
ListBox2.List(i, 0) = rng.Offset(0, 1)
ListBox2.List(i, 3) = "| " & rng.Offset(0, 3)
ListBox2.List(i, 4) = "| " & rng.Offset(0, 108)
ListBox2.List(i, 5) = "| "
ListBox2.List(i, 6) = rng.Offset(0, -2)
i = i + 1
Do
Set rng = Workbooks("Auftrag.xls").Worksheets("Daten").Range("C:C").FindNext(After:= _
_
rng)
If rng.Address = sFirst Then Exit Do
ListBox2.AddItem
ListBox2.List(i, 0) = rng.Offset(0, 1)
ListBox2.List(i, 3) = "| " & rng.Offset(0, 3)
ListBox2.List(i, 4) = "| " & rng.Offset(0, 108)
ListBox2.List(i, 5) = "| "
ListBox2.List(i, 6) = rng.Offset(0, -2)
i = i + 1
Loop
End If
'  Archiv
Set rng = Workbooks("Archiv.xls").Worksheets("Daten").Range("C:C") _
.Find(What:=txtSearch, LookIn:=xlValues, LookAt:=xlPart, After:=Range("C15000"))
If Not rng Is Nothing Then
sFirst = rng.Address
ListBox2.AddItem
ListBox2.List(i, 0) = rng.Offset(0, 1)
ListBox2.List(i, 3) = "| " & rng.Offset(0, 3)
ListBox2.List(i, 4) = "| " & rng.Offset(0, 108)
ListBox2.List(i, 5) = "| "
ListBox2.List(i, 6) = rng.Offset(0, -2)
i = i + 1
Do
Set rng = Workbooks("Archiv.xls").Worksheets("Daten").Range("C:C").FindNext(After:=rng)
If rng.Address = sFirst Then Exit Do
ListBox2.AddItem
ListBox2.List(i, 0) = rng.Offset(0, 1)
ListBox2.List(i, 3) = "| " & rng.Offset(0, 3)
ListBox2.List(i, 4) = "| " & rng.Offset(0, 108)
ListBox2.List(i, 5) = "| "
ListBox2.List(i, 6) = rng.Offset(0, -2)
i = i + 1
Loop
'  Die Datenbank Geräte aufrufen
GeNr = ListBox2.List(0, 0)
Set var = Workbooks("Geraete.xls").Worksheets("geraete").Range("A:A") _
.Find(What:=GeNr, LookIn:=xlValues, LookAt:=xlPart, After:=Range("A8000"))
If Not var Is Nothing Then
tFirst = var.Address
ListBox2.List(0, 0) = " " & var.Offset(0, 2)
ListBox2.List(0, 1) = "| " & var.Offset(0, 4)
ListBox2.List(0, 2) = "| " & var.Offset(0, 5)
Max = ListBox2.ListCount
wert = Max - 1
For i = 1 To wert
Zahl = ListBox2.List(i, 0)
Set var = Workbooks("Geraete.xls").Worksheets("geraete").Range("A:A") _
.Find(What:=Zahl, LookIn:=xlValues, LookAt:=xlPart, After:=Range("A8000"))
tFirst = var.Address
ListBox2.List(i, 0) = " " & var.Offset(0, 2)
ListBox2.List(i, 1) = "| " & var.Offset(0, 4)
ListBox2.List(i, 2) = "| " & var.Offset(0, 5)
Next i
End If
End If
If ListBox2.ListCount = 0 Then
Unload Me
Exit Sub
End If
End Sub

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox sortieren
07.07.2018 08:12:48
Oberschlumpf
Hi Sabrina,
füge diesen Code in ein allgemeines Modul ein:

Sub sbSort()
Dim lshTmpSheet As Worksheet, lloRow As Long, liIdx As Integer
'in der Datei, in der sich das Userform mit Listbox2 befindet, wird am Ende aller  _
Tabellen eine weitere Tabelle hinzugefügt
With ThisWorkbook
.Sheets.Add After:=.Sheets(.Sheets.Count)
Set lshTmpSheet = .Sheets(.Sheets.Count)
End With
lloRow = 1
'der Inhalt aus Listbox2 wird in die letzte, neue Tabelle eingefügt
With UserForm1.ListBox2 'anpassen, wenn dein Userform nicht Userform1 heißt
For liIdx = 0 To .ListCount - 1
lshTmpSheet.Range("A" & lloRow).Value = .List(liIdx, 0) 'Hersteller
lshTmpSheet.Range("B" & lloRow).Value = .List(liIdx, 1) '| Typ
lshTmpSheet.Range("C" & lloRow).Value = .List(liIdx, 2) '| Seriennummer
lshTmpSheet.Range("D" & lloRow).Value = .List(liIdx, 3) '| Datum
lshTmpSheet.Range("E" & lloRow).Value = .List(liIdx, 4) '| Kosten
lshTmpSheet.Range("F" & lloRow).Value = .List(liIdx, 5) '| Auftragsnummer
lloRow = lloRow + 1
Next
End With
'die Tabelle mit den zuvor eingefügten Werten aus Listbox2 wird nach Datum absteigend  _
sortiert
With lshTmpSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("D2:D" & lshTmpSheet.Cells(Rows.Count, 4).End(xlUp).Row), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange lshTmpSheet.Range("A1:F" & lshTmpSheet.Cells(Rows.Count, 1).End(xlUp).Row) _
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'alle Inhalte in Listbox2 werden zuerst gelöscht und dann wieder mit den sortierten  _
Werten aus neue Tabelle befüllt
With UserForm1.ListBox2 'anpassen, wenn dein Userform nicht Userform1 heißt
.Clear
For lloRow = 2 To lshTmpSheet.Cells(Rows.Count, 1).End(xlUp).Row
.AddItem
.List(.ListCount - 1, 0) = lshTmpSheet.Range("A" & lloRow).Value
.List(.ListCount - 1, 1) = lshTmpSheet.Range("B" & lloRow).Value
.List(.ListCount - 1, 2) = lshTmpSheet.Range("C" & lloRow).Value
.List(.ListCount - 1, 3) = lshTmpSheet.Range("D" & lloRow).Value
.List(.ListCount - 1, 4) = lshTmpSheet.Range("E" & lloRow).Value
.List(.ListCount - 1, 5) = lshTmpSheet.Range("F" & lloRow).Value
Next
End With
'die zu Beginn hinzugefügte Tabelle wird immer wieder gelöscht, weil sie ja jetzt nicht  _
mehr benötigt wird
Application.DisplayAlerts = False
lshTmpSheet.Delete
Application.DisplayAlerts = True
Set lshTmpSheet = Nothing
End Sub

ändere dann deinen Code so:
ersetz deinen Code

If ListBox2.ListCount = 0 Then
Unload Me
Exit Sub
End If
End Sub

durch

If ListBox2.ListCount = 0 Then
Unload Me
Exit Sub
End If
sbSort
End Sub

Hilfts?
Wenn nicht, zeig uns bitte per Upload eine Bsp-Datei inklusive Daten + deinem Code.
Ciao
Thorsten
Anzeige
AW: Listbox sortieren
07.07.2018 14:02:09
Sabrina
Wow Thorsten, das funktioniert wunderbar.
Ich habe nur eine Sache, manchmal steht in D nicht nur das Datum drinnen sondern auch das Datum.
Also machmal sieht es so "10.11.2016" und manchmal "12.03.2018 11:53:27" so aus.
Wie kann man die Spalte D vor dem Sortieren noch in das Format TT.MM.JJJJ wandeln?
Liebe Grüße Sabrina
AW: Listbox sortieren
07.07.2018 15:21:44
Sabrina
Ich habe nun alles angepasst dass es passt.
bekomme aber nicht hin dass nach dem Datum sortiert wird
Sorttiert werden soll ja das Datum ... Spalte E
Kannst du / Kann jemand mir helfen?
Sub sbSort()
Dim lshTmpSheet As Worksheet, lloRow As Long, liIdx As Integer
'in der Datei, in der sich das Userform mit Listbox2 befindet, wird am Ende aller Tabellen  _
eine weitere Tabelle hinzugefügt
With ThisWorkbook
.Sheets.Add After:=.Sheets(.Sheets.Count)
Set lshTmpSheet = .Sheets(.Sheets.Count)
End With
lloRow = 1
'der Inhalt aus Listbox2 wird in die letzte, neue Tabelle eingefügt
With Alle.ListBox2 'anpassen, wenn dein Userform nicht Userform1 heißt
For liIdx = 0 To .ListCount - 1
lshTmpSheet.Range("A" & lloRow).Value = .List(liIdx, 0) 'Hersteller
lshTmpSheet.Range("B" & lloRow).Value = .List(liIdx, 1) '| Typ
lshTmpSheet.Range("C" & lloRow).Value = .List(liIdx, 2) '| Seriennummer
lshTmpSheet.Range("D" & lloRow).Value = .List(liIdx, 3) '|
lshTmpSheet.Range("E" & lloRow).Value = .List(liIdx, 4) '  Datum
lshTmpSheet.Range("F" & lloRow).Value = .List(liIdx, 5) '| Kosten
lshTmpSheet.Range("G" & lloRow).Value = .List(liIdx, 6) '|
lshTmpSheet.Range("H" & lloRow).Value = .List(liIdx, 7) '  Auftragsnummer
lloRow = lloRow + 1
Next
End With
'die Tabelle mit den zuvor eingefügten Werten aus Listbox2 wird nach Datum absteigend _
sortiert
With lshTmpSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range("E1:E" & lshTmpSheet.Cells(Rows.Count, 5).End(xlUp).Row), _
_
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange lshTmpSheet.Range("A1:H" & lshTmpSheet.Cells(Rows.Count, 1).End(xlUp).Row) _
_
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'alle Inhalte in Listbox2 werden zuerst gelöscht und dann wieder mit den sortierten _
Werten aus neue Tabelle befüllt
With Alle.ListBox2 'anpassen, wenn dein Userform nicht Userform1 heißt
.Clear
For lloRow = 2 To lshTmpSheet.Cells(Rows.Count, 1).End(xlUp).Row
.AddItem
.List(.ListCount - 1, 0) = lshTmpSheet.Range("A" & lloRow).Value
.List(.ListCount - 1, 1) = lshTmpSheet.Range("B" & lloRow).Value
.List(.ListCount - 1, 2) = lshTmpSheet.Range("C" & lloRow).Value
.List(.ListCount - 1, 3) = lshTmpSheet.Range("D" & lloRow).Value
.List(.ListCount - 1, 4) = lshTmpSheet.Range("E" & lloRow).Value
.List(.ListCount - 1, 5) = lshTmpSheet.Range("F" & lloRow).Value
.List(.ListCount - 1, 6) = lshTmpSheet.Range("G" & lloRow).Value
.List(.ListCount - 1, 7) = lshTmpSheet.Range("H" & lloRow).Value
Next
End With
'die zu Beginn hinzugefügte Tabelle wird immer wieder gelöscht, weil sie ja jetzt nicht _
mehr benötigt wird
Application.DisplayAlerts = False
lshTmpSheet.Delete
Application.DisplayAlerts = True
Set lshTmpSheet = Nothing
End Sub

Anzeige
AW: Listbox sortieren
07.07.2018 15:56:02
Oberschlumpf
Hi Sabrina,
änder diese Zeile...

.SortFields.Add Key:=Range("E1:E" & lshTmpSheet.Cells(Rows.Count, 5).End(xlUp).Row), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

...um in...

.SortFields.Add Key:=lshTmpSheet.Range("E2:E" & lshTmpSheet.Cells(Rows.Count, 5).End(xlUp).Row), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

...und änder diese Zeile...

.Header = xlNo

...um in...

.Header = xlYes

...hilfts?
Ciao
Thorsten
Anzeige
AW: Listbox sortieren
07.07.2018 16:16:31
Sabrina
Danke Thorsten
Es wird alles gemacht. Werte in die Extra Tabelle und wieder zurück ins Userform geschrieben.
Es wird nur nicht sortiert :(
LG
Sabbel
AW: Listbox sortieren
07.07.2018 16:34:18
Oberschlumpf
Hi Sabrina
in meiner ersten Antwort schrieb ich ja:
Hilfts?
Wenn nicht, zeig uns bitte per Upload eine Bsp-Datei inklusive Daten + deinem Code.

Bis später....vielleicht
Thorsten
AW: Listbox sortieren
07.07.2018 17:22:27
Sabrina
Hallo Thorsten
Hier die Dateien
https://www.herber.de/bbs/user/122528.zip
Jetzt habe ich noch was falsch gemacht denn es wird die Userform auch nicht mehr gefüllt.
Liebe Grüße Sabbel
Anzeige
AW: Listbox sortieren
07.07.2018 19:22:44
Oberschlumpf
Hi Sabrina,
die Tabelle wurde nicht gefüllt, weil du, wie noch in deinem ersten Text, nicht mehr alle Spalten (aus 3 Dateien!) befüllt hattest.
Mein Code hatte sich "darauf verlassen", dass alle Spalten gefüllt sind, was ja bis zu deiner Bsp-Datei auch funktionierte.
fachlich besser ausgedrückt:
Mein Code hatte als Grundlage Spalte 1 für alle befüllte Zellen definiert.
Ich dachte, dass in Spalte A auf jeden Fall ein Eintrag für "Hersteller" steht, da ja das Ausfüllen der anderen Spalten ohne Hersteller keinen Sinn macht (meine Meinung).
Jetzt habe ich meinen Code so geändert, dass auf jeden Fall in der Datumsspalte ein Eintrag vorhanden sein muss.
hier, versuch mal:
https://www.herber.de/bbs/user/122533.xls
In Verbindung mit deiner zusätzlichen Testdatei "Inhalte.xls" funktioniert nun alles.
Das Userform wird gefüllt + die Listbox2 wird nach Datum abst. sortiert.
Unterschied zu deiner Datei vor meinen Änderungen:
Nachdem ich das mit dem Befüllen der Listbox wieder hinbekommen hab, wird Datum so angezeigt: Sa. 07.07.2018
Für die Anzeige mit Wochentag ist deine Spalte in der Listbox aber zu schmal.
Ich hab es so geändert, dass als Datum nun drin steht: 07.07.2018
Wenn du den Wochentag wiederhaben willst, dann such nach dieser Codezeile:
.List(.ListCount - 1, 4) = Format(lshTmpSheet.Range("E" & lloRow).Value, "dd.mm.yyyy")

über dieser Zeile ist das Format inkl. Wochentag.
Aktiviere die grüne Zeile + deaktiviere die gesuchte Zeile.
Läuft jetzt alles?
Ciao
Thorsten
Anzeige
AW: Listbox sortieren
07.07.2018 19:55:08
Sabrina
Es funktioniert wunderbar
Vielen Vielen Dank für deine Arbeit.
Klasse Leistung
Liebe Grüße Sabbel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige