AW: mit Userform suchen und filtern
26.05.2019 15:35:18
Matthias
Moin!
Da bin ich wieder. Also das mit dem > hast du schon gefunden. Die anderen Vergleiche sollten passen. Kam vorhin nicht zum Testen und der Fehler war beim C&P passiert. Bzgl. der Daten ohne Zahlungseingang hier gändert. Habe nur eine Zeile ergänzt. Jetzt sollte es passen. Die Suche läuft über die TB1 und die CB1 für den NAmen. Wenn du da nur die CB nutzt, kann man den Code auch kürzen. War mir da aber nicht sicher.
Private Sub CommandButton1_Click()
'filtern
Dim quelle As Object
Dim daten
Dim zeilen As Long, spalten As Long, zeile As Long, boxind As Long, spalte As Long
Dim eintragen As Boolean
Dim summe As Long
Dim wert, tbinhalt
Dim nameindex As Long, zeitindex As Long
Dim wert1, wert2, zeitstart, zeitende
Application.ScreenUpdating = False
Set quelle = Worksheets("Rechnungen")
Me.ListBox1.Clear
Me.ListBox1.ColumnCount = 8
zeilen = quelle.Cells(quelle.Rows.Count, 1).End(xlUp).Row
spalten = quelle.Cells(1, quelle.Columns.Count).End(xlToLeft).Column 'die Überschriften
daten = quelle.Cells(1, 1).Resize(zeilen, spalten) 'mit Überschriften in Zeile 1
'Namencontrols auswerten
'alle kunden, beide leer
nameindex = 1
'ausgewählter Kunde aus TB
If Me.TextBox1 "" Then
nameindex = 3
End If
'ausgewählter Kunde aus CB
If Me.ComboBox1.ListIndex -1 Then
nameindex = 4
End If
'ausgewählter Kunde aus beiden Feldern
If Me.TextBox1 "" And Me.ComboBox1.ListIndex -1 Then
nameindex = 2
End If
'Zeit auswerten
zeitindex = 1
'von
If Me.TextBox_Date1 "" Then
zeitindex = 2
zeitstart = CDbl(CDate(Me.TextBox_Date1))
End If
'bis
If Me.TextBox_Date2 "" Then
zeitindex = 3
zeitende = CDbl(CDate(Me.TextBox_Date2))
End If
'von bis
If Me.TextBox_Date1 "" And Me.TextBox_Date2 "" Then
zeitindex = 4
zeitstart = CDbl(CDate(Me.TextBox_Date1))
zeitende = CDbl(CDate(Me.TextBox_Date2))
End If
For zeile = 2 To zeilen '2 da in der ersten Zeile Überschriften stehen
eintragen = True
wert1 = daten(zeile, 10) 'kd nr
wert2 = daten(zeile, 11) 'kd na
Select Case nameindex
Case 1 'alle Namen
If wert1 = "" And wert2 = "" Then eintragen = False
Case 2 'gew Name beide
If InStr(1, wert1, Me.TextBox1, vbTextCompare) = 0 Or _
InStr(1, wert2, Me.ComboBox1, vbTextCompare) = 0 Then eintragen = False
Case 3 'gew Name tb
If InStr(1, wert1, Me.TextBox1, vbTextCompare) = 0 Then eintragen = False
Case 4 'gew Name cb
If InStr(1, wert2, Me.ComboBox1, vbTextCompare) = 0 Then eintragen = False
End Select
If daten(zeile, 9) = "" Then eintragen = False
If eintragen = True Then
Select Case zeitindex
Case 1 'alle
If daten(zeile, 9) = "" Then eintragen = False
Case 2 'von
If CDbl(daten(zeile, 9)) zeitende Then eintragen = False
Case 4 ' beide
If CDbl(daten(zeile, 9)) zeitende Then _
eintragen = False
End Select
End If
If eintragen = True Then
Me.ListBox1.AddItem
spalte = Me.ListBox1.ListCount - 1
Me.ListBox1.List(spalte, 0) = daten(zeile, 1)
Me.ListBox1.List(spalte, 1) = daten(zeile, 2)
Me.ListBox1.List(spalte, 2) = daten(zeile, 3)
Me.ListBox1.List(spalte, 3) = daten(zeile, 4)
Me.ListBox1.List(spalte, 4) = Format(CDbl(daten(zeile, 5)), "#,##0.00 ")
summe = summe + CDbl(daten(zeile, 5))
Me.ListBox1.List(spalte, 5) = daten(zeile, 9)
Me.ListBox1.List(spalte, 6) = daten(zeile, 10)
Me.ListBox1.List(spalte, 7) = daten(zeile, 11)
End If
Next
Me.TextBox_Betrag.Value = Format(CDbl(summe), "#,##0.00 ")
Application.ScreenUpdating = True
End Sub
VG