Clever-Excel-Forum

Normale Version: VBA: Listbox nach Daturm filtern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich möchte gerne meine Listbox nach einem Datum filtern und habe dafür versucht, eine if-Abfrage einzufügen.
Jedoch erscheint die Meldung, dass die Typen unverträglich seien. Mit einer "Strg" Definition würde es funktioniere, aber da klappt das Filtern nach datum nicht.

Findet jemand auf die Schnelle eine Lösung?

LG Eric


Code:
' ************************************************************************************************
' VERARBEITUNGSROUTINEN
' ************************************************************************************************

'Diese Routine wird aufgerufen um die Liste (ListBox1) zu leeren, einzustellen und neu zu füllen
Private Sub LISTE_LADEN_UND_INITIALISIEREN()
  Dim STARTZEILENNUMMER As Long
  Dim lzeile As Long
  Dim lZeileMaximum As Long
  Dim i As Integer
  Dim lspalte As Integer
 




    'Alle TextBoxen leer machen
    For i = 1 To iCONST_ANZAHL_EINGABEFELDER
        Me.Controls("TextBox" & i) = ""
    Next i

    ListBox1.Clear 'Liste leeren
   
    '4 Spalten einrichten
    'Spalte 1: Zeilennummer des Datensatzes
    'Spalte 2: Name (Spalte A)
    'Spalte 3: Telefon (Spalte B)
    'Spalte 4: E-Mail (Spalte C)
    ListBox1.ColumnCount = 4
   

    'Spaltenbreiten der Liste anpassen (0=ausblenden, nichts=automatisch)
    '"<Breite Spalte 1>;<Breite Spalte 2>;<Breite Spalte 3>;<Breite Spalte 4>"
    ListBox1.ColumnWidths = "0;;;"
    'Feste Breiten: ListBox1.ColumnWidths = "0;100;100;100"
    'Um eine Schleife für alle Datensätze zu erhalten, benötigen wir die letzte verwendete Zeile
   
  STARTZEILENNUMMER = 5
           
    For lzeile = STARTZEILENNUMMER To 999
   
    Tabelle2.Select
    If TabStrip1.Value = 0 Then
      lspalte = 3
       
        'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
        If IST_ZEILE_LEER(lzeile) = False Then
       [b]     If CDate(Tabelle2.Cells(lzeile, lspalte - 1)) >= "10.03.2020" And CDate(Tabelle2.Cells(lzeile, lspalte - 1)) <= "11.03.2020" Then[/b]
            'Spalte 1 der Liste mit der Zeilennummer füllen
                ListBox1.AddItem lzeile
            'Spalten 2 bis 4 der Liste füllen

            ListBox1.List(ListBox1.ListCount - 1, 1) = CDate(Tabelle2.Cells(lzeile, lspalte - 1))
            ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle2.Cells(lzeile, lspalte))
            ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle2.Cells(lzeile, lspalte + 1))
End If
        End If
       
      ElseIf TabStrip1.Value = 1 Then
        lspalte = 3

        'Nur wenn die Zeile benutzt / nicht leer ist, zeigen wir etwas an:
        If IST_ZEILE_LEER(lzeile) = False Then
           
            'Spalte 1 der Liste mit der Zeilennummer füllen
            ListBox1.AddItem lzeile
            'Spalten 2 bis 4 der Liste füllen
            ListBox1.List(ListBox1.ListCount - 1, 1) =CDate(Tabelle2.Cells(lzeile, lspalte + 2))
            ListBox1.List(ListBox1.ListCount - 1, 2) = CStr(Tabelle2.Cells(lzeile, lspalte + 3))
            ListBox1.List(ListBox1.ListCount - 1, 3) = CStr(Tabelle2.Cells(lzeile, lspalte + 4))
       
        End If
    End If
    Next lzeile



End Sub
Hallo Eric,

vieleicht so:
If CDate(Tabelle2.Cells(lzeile, lspalte - 1)) >= DateValue("10.03.2020") And CDate(Tabelle2.Cells(lzeile, lspalte - 1)) <= DateValue("11.03.2020") Then
Gruß Uwe
Klappt leider nicht :/
Hallöchen,

Code:
Klappt leider nicht :/

schwierig, den Fehler darin zu finden Sad
Guten Morgen,

Tut mir leid Confused 
Ich habe mal eine Beispielmappe angehangen (für den ein oder anderen bestimmt bekannt). Ab Zeile 284 wäre der von mir eingefügte Code (jedoch mit ' heruasgenommen).

Ich bin mir sicher, dass ich irgendwo in meinem Programm (mir fehlen viele Kenntnisse) einen Definitionsfehler von der Listbox drin habe..

LG Eric
#push
Ich würde VBA verwenden:

z.B.

Code:
Private Sub UserForm_Initialize()
    with  ComboBox3
       .List = [transpose(row(1:31))]
       .Value = Format(Date, "DD")
    end with

    with ComboBox1
       .List = Application.GetCustomListContents(3)
       .Value = Format(Date, "MM")
    end with

    with ComboBox2
        .List = [transpose(row(2019:2030))]
       .Value = Format(Date, "YYYY")
    end with

    ListBox1.List = Tabelle2.ListObjects(1).DataBodyRange.Value
End Sub

Schau mal: https://www.snb-vba.eu/VBA_Userform_in_database_en.html
Grüße,

Bringt auch keinen Erfolg. Oder muss außer das "USerForm_Initialize" noch weiter was geändert werden?

LG Eric
Hallöchen,

nochmal was zum Fehler bei Uwe's Vorschlag. In Deinem Code hast Du
STARTZEILENNUMMER = 5

Das ist die Zeile mit den Überschriften. Infolge wird versucht, die Überschrift in ein Datum zu wandeln. Nimm mal
STARTZEILENNUMMER = 6