datumswerte in listbox aufsteigend

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: datumswerte in listbox aufsteigend
von: louis
Geschrieben am: 13.03.2005 18:07:26
hallo forum,
einen schönen sonntag wünsche ich erst ein mal.
er könnte schöner sein wenn ich folgendes in den griff bekämme.
ich habe eine userform listbox in die ich mir xlsdatein anzeigen lasse die als dateinamen das datum des speichertages haben.
also(03.12.2004.xls,05.01.2005.xls usw)
jetzt möchte ich das die listbox mir die datumswerte absteigend sortiert.
im moment sortiert sie mir die daten nach den ersten beiden zahlen, also nach dem tag. ich möchte aber nach dem ganzen datum sortiert haben.
ich hoffe ich habe mich verständlich ausgedrückt.
über hilfe würde ich mich sehr freuen.
mfg
louis

Bild

Betrifft: AW: datumswerte in listbox aufsteigend
von: Ramses
Geschrieben am: 13.03.2005 18:19:00
Hallo
schau mal 4 Beiträge tiefer ob das auch geht :-)
Gruss Rainer
Bild

Betrifft: AW: datumswerte in listbox aufsteigend
von: louis
Geschrieben am: 13.03.2005 18:31:56
hallo rainer,
danke für deine antwort.
boa, da brauch ich jetzt erst mal eine zeit zu.
ich hoffe ich darf mich noch einmal melden wenn es nicht klappt.
mfg
louis
Bild

Betrifft: AW: datumswerte in listbox aufsteigend
von: louis
Geschrieben am: 13.03.2005 23:05:38
ich bin's leider noch einmal. mit dem codevorschlag von ramses komme ich nicht wirklich zurecht, dafür bin ich anscheinend zu blöd.
ich poste jetzt erst mal den code. ich versuche die ganze zeit die variablen richtig zu deklarieren. bekomme das aber nicht hin.

Private Sub list_Click()
    Dim iCounter As Integer
    lstFiles.Clear
    With Application.FileSearch
        .LookIn = "E:\aa\bb"
        .FileType = msoFileTypeExcelWorkbooks
        .Execute
        For iCounter = 1 To .FoundFiles.Count
            lstFiles.AddItem Dir$(.FoundFiles(iCounter))
        Next iCounter
    End With
End Sub


Private Sub CommandButton2_Click()
Dim X As Integer, N As Integer
Dim Y As Integer
With lstFiles
  For X = 0 To .ListCount - 1
    For iNext = iLast + 1 To .ListCount - 1
      If .List(X) > .List(N) Then
        Y = .List(X)
        .List(X) = .List(N)
        .List(N) = Y
      End If
    Next N
  Next X
End With
End Sub

habe schon versucht die variablen als date, string und wat nicht alles zu deklarieren aber das geht auch nicht. es muss doch möglich sein das zahlenformat der variablen so zu verändern das ereine 22.11.2005 als datum erkennt und demensprechent sortiert.
die recherche habe ich jetzt durch bin da aber auch nicht weiter gekommen.
die letzte möglichkeit die ich sehe ist alles in ein sheet einzutragen,da zu sortieren und dann in die listbox ein zu tragen. das ist aber nicht unbeding das gelbe vom ei.
wenn noch jemand einen anstoss hat oder einen tip in die richtige richtung würde ich mich freuen.
mfg von einem ziemlich gecknickten
louis
Bild

Betrifft: AW: datumswerte in listbox aufsteigend
von: Bert
Geschrieben am: 14.03.2005 00:11:03
Wenn du in der Listbox die Dateinamen einschließlich der Extension brauchst,
musst du die vorm Sortieren naürlich eleminieren.
Bert
Bild

Betrifft: Von hinten durch die Brust ins Auge ... :-)
von: Ramses
Geschrieben am: 14.03.2005 00:12:26
Hallo
Voraussetzung ist, dass die Dateinamen wirklich im Format "01.01.2005.xls" vorliegen

Private Sub CommandButton4_Click()
'(C) by Ramses
'Sortiert Filenamen die im Format "01.01.2005.xls" vorliegen
'korrekt aufsteigend und weist die Liste einer Listbox zu
Dim iCounter As Integer, tmpStr As String
Dim i As Long, Temp As String
With Application.FileSearch
    .LookIn = "D:\Rainer"
    .FileType = msoFileTypeExcelWorkbooks
    .Execute
    ReDim FileArr(.FoundFiles.Count)
    'Filenamen modifizieren, da die normale Sort-Methode
    'nur bis zum ersten Punkt sortiert
    For iCounter = 1 To .FoundFiles.Count
        tmpStr = Dir(.FoundFiles(iCounter))
        tmpStr = WorksheetFunction.Substitute(Left(tmpStr, 10), ".", "")
        FileArr(iCounter) = tmpStr
    Next iCounter
End With
'Sortierung durchführen
QuickSort FileArr, LBound(FileArr), UBound(FileArr)
'Filenamen rekonstruieren
For i = LBound(FileArr) To UBound(FileArr)
    If Len(FileArr(i)) = 7 Then
        Temp = Right(FileArr(i), 4)
        Temp = Left(Right(FileArr(i), 6), 2) & "." & Temp
        Temp = "0" & Left(FileArr(i), 1) & "." & Temp
        FileArr(i) = Temp & ".xls"
    ElseIf Len(FileArr(i)) = 8 Then
        Temp = Right(FileArr(i), 4)
        Temp = Left(Right(FileArr(i), 6), 2) & "." & Temp
        Temp = Left(FileArr(i), 2) & "." & Temp
        FileArr(i) = Temp & ".xls"
    End If
Next
'Quot erat demonstrandum
Me.ListBox1.Clear
Me.ListBox1.List = FileArr
End Sub

Der Code muss auch noch mit in die UF.
Der ist aber nicht von mir :-)
Public Sub QuickSort(toSortArray() As String, ByVal LB As Single, ByVal UB As Single)
'String Array sortieren, by ActiveVB
Dim P1 As Single
Dim P2 As Single
Dim ref As String
Dim Temp As String
P1 = LB
P2 = UB
ref = toSortArray((P1 + P2) / 2)
Do
Do While (toSortArray(P1) < ref)
P1 = P1 + 1
Loop
Do While (toSortArray(P2) > ref)
P2 = P2 - 1
Loop
If P1 <= P2 Then
Temp = toSortArray(P1)
toSortArray(P1) = toSortArray(P2)
toSortArray(P2) = Temp
P1 = P1 + 1
P2 = P2 - 1
End If
Loop Until (P1 > P2)
If LB < P2 Then Call QuickSort(toSortArray, LB, P2)
If P1 < UB Then Call QuickSort(toSortArray, P1, UB)
End Sub
Gruss Rainer
Bild

Betrifft: AW: Von hinten durch die Brust ins Auge ... :-)
von: louis
Geschrieben am: 14.03.2005 16:17:41
hallo rainer,
ein ganz dickes dankeschön für deine hilfe ohne die forenarbeit einiger leute hier wäre ich ganz schön hilflos.
auch auf die gefahr hihn das ich jetzt als lutscher abgestellt werde aber ich bekomme den code nicht ans laufen. ich versuche es jetzt schon den ganzen tag.
in der zeile QuickSort FileArr, LBound(FileArr), UBound(FileArr) makiert er mir FileArr blau (das sub wird gelb markiert) und die fehlermeldung lautet Unverträglicher Typ: Datenfeld oder benutzerdefinierter typ erwartet.
ich habe dann einfach diese ganze zeile entfernt was nach meinem verständnis dazu führen müsste das mir die daten ganz normal in der listbox angezeigt werden sollten nun erhalte ich aber folgende fehlermeldung.
Me.ListBox1.List = FileArr wird gelb fehlermeldung: Eigenschaft value konnte nicht gesetzt werden. Typenkonflikt
wenn du dich nicht mehr meldest kann ich das auch verstehen.
mein problem ist einfach das ich hier learning by doing veranstallte und immer eine immense zeit verbrauche bis ich was kapiert habe.
vielen dank das ihr mich hier ertragt
mfg
louis
Bild

Betrifft: AW: Von hinten durch die Brust ins Auge ... :-)
von: Ramses
Geschrieben am: 14.03.2005 18:14:01
Hallo
das ist ein dummer Kopierfehler :-)
In die erste Zeile, also noch VOR, "Private Sub Commandbutton_Click" müssen diese Einträge stehen:
Option Explicit
Option Base 1
Public FileArr() As String

Sorry,...
Gruss Rainer
Bild

Betrifft: AW: Von hinten durch die Brust ins Auge ... :-)
von: louis
Geschrieben am: 14.03.2005 19:20:54
hallo rainer,
danke für deine geduld und mühe mit mir.
Public FileArr() As String mit dieser zeile habe ich noch so meine probleme
füge ich sie nach Option Base 1 ein bekomme ich den fehler: Konstanten, Zeichenfolgen fester länge . . . sind als Public Elemente in Objektmodulen nicht zugelassen.
Nehme ich die Klammern() weg
wird mir ReDim FileArr blau markiert und es kommt eine fehlermeldung : Erwartet Datenfeld
Ersetzte ich Public FileArr() As String durch Dim FileArr() As String und bringe das ganze in Private Sub CommandButton4_Click() unter wird die listbox zwar gefüllt aber nicht sortiert.
wo mache ich da noch was falsch?
mir ist das schon bald peinlich
mfg
louis
Bild

Betrifft: AW: Von hinten durch die Brust ins Auge ... :-)
von: Ramses
Geschrieben am: 14.03.2005 19:26:11
Hallo
kann ich zwar nicht nachvollziehen, aber setz mal die Zeile
Public FileArr() As String
in ein Modul deiner Mappe in die erste Zeile
Gruss Rainer
Bild

Betrifft: AW: Von hinten durch die Brust ins Auge ... :-)
von: louis
Geschrieben am: 14.03.2005 20:37:18
hallo rainer,
ich habe die zeile Public FileArr() As String
in ein extra modul gestellt. In die listbox eintragen geht jetzt.
wenn ich das code stück filename rekonstruieren weglasse werden mir die daten auch ohne punkte und xls angezeigt.das klappt also auch bestens.
aber sortiert wird jetzt als ganze zahl.
als beispiel 01.01.2005,04.01.2005,01.02.20005
wird so sortiert
01.01.2005
01.02.2005
04.01.2005
das liegt wohl an dem code der nicht von dir ist.
da brauch ich noch ein bischen zeit für um mir den aus einander zu nehmen.
danke noch mal für deine super hilfe
mfg
louis
Bild

Betrifft: nochmal ein ganz dickes lob !!!
von: louis
Geschrieben am: 15.03.2005 20:18:19
hallo alle miteinander,
läuft jetzt.
habe zwar eine ewigkeit dafür gebraucht und ohne eure hilfe längst erschossen, naja.
ich habe mir diese variante zusammengebaut.

Private Sub CommandButton2_Click()
Dim iCounter As Integer, tmpStr As String
Dim N As Integer, Y As String
With Application.FileSearch
    .LookIn = "E:\aa\bb"
    .FileType = msoFileTypeExcelWorkbooks
    .Execute
    ReDim FileArr(.FoundFiles.Count)
    For iCounter = 1 To .FoundFiles.Count
        tmpStr = Dir(.FoundFiles(iCounter))
        tmpStr = WorksheetFunction.Substitute(Left(tmpStr, 10), "", "")
        tmpStr = Format(CDate(tmpStr), "dd.mm.yyyy")
        FileArr(iCounter) = tmpStr
    Next iCounter
End With
Me.ListBox1.Clear
Me.ListBox1.list() = FileArr
End Sub

ich muss zwar jetzt die zu suchenden files in diesem format "yyyy.mm.dd" speichern aber das ist nocg zu verkraften.
ich möchte mich noch mal bei rainer bedanken und auch entschuldigen. du hast dir so viel mühe mit mir gemacht und ich depp krieg den code nicht ans laufen. ich habe es stundenlang probiert ich bring es nicht hin. aber ich habe einiges mitgenommen.
1a forenarbeit hier. vieleicht kann ich mal in ein paar jahren revanchieren.
macht weiter so und vielen herzlichen dank.
mfg
louis
 Bild

Beiträge aus den Excel-Beispielen zum Thema "datumswerte in listbox aufsteigend"