Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1832to1836
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

Fehler beim Filtern UF Textbox Datum

Fehler beim Filtern UF Textbox Datum
17.06.2021 11:19:08
Peter
Hallo, könnt ihr mir bitte helfen.
Aus einer UF mit zwei Textboxes mit Datum möchte ich eine Tabelle filtern.
Hierzu verwende ich

Dim v1 As Date 'in den Zellen steht zwar ein Datum, verglichen wird aber mit der fortlaufenden Zahl
Dim v2 As Date
Dim v3 As Date
Dim v4 As Date
Dim v4a As String
Dim loLetzteB&
v1 = (TextBox2)
Debug.Print "v1: " & v1
v2 = (TextBox3)
Debug.Print "v2: " & v2
v3 = Tb.Range("B10")      'erste Datum der Tabelle in Spalte B
Debug.Print "v3: " & v3
v4 = v1 - 1                     'Anfangsdatum der Auswahl abzüglich 1 Tag als Kalendertag
'v4 = (TextBox1) - 1
Debug.Print "v4: " & v4
v4a = v4                        'Anfangsdatum der Auswahl abzüglich 1 Tag als Zahl, erforderlich für Filtern
Debug.Print "v4a: " & v4a
'Anfang - Filtern Bereich vom 1. Datum Tabelle bis vorletzte Datum vor Auswahl
loLetzteB = Tb.Range("B" & Rows.Count).End(xlUp).Row
If Tb.AutoFilterMode Then Tb.AutoFilterMode = False ' Autofilter ausschalten
Tb.Range("B9:H" & Cells(Rows.Count, 2).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=">=" & v3, Operator:=xlAnd, _
Criteria2:="
Leider wird das Datum nicht erkannt. Was mache ich bitte falsch?!
Gruss
Peter

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

Betreff
Datum
Anwender
Anzeige
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 11:34:41
Daniel
Hi
gib mal in die Textboxen das Datum im amerikanischen Format ein, dh nicht 17.06.2021 sondern 06/17/2021.
das ist die Form, die der Autofilter verarbeiten kann (ist ja ein amerikanisches Programm).
wenn du in die Textboxen lieber das deutsche Format eingeben willst, dann kannst du den Text mit dieser Programmzeile umbauen (korrektes Datum in der Textbox vorausgesetzt)

v3 = Format(CDate(v3), "MM\/DD\/YYYY"))
Gruß Daniel
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 11:54:42
Peter
Hallo Daniel,
besten Dank für Deine Hilfe. Leider kein Erfolg.
Ich habe das Makro separat mit Datum-Zugriff auf Tabelle. Dieses funktioniert einwandfrei.

Sub Filtermakro2ad()
Dim wb As Workbook
Dim Tb As Worksheet
Dim v1 As Double 'in den Zellen steht zwar ein Datum, verglichen wird aber mit der fortlaufenden Zahl
Dim v2 As Double
Dim v3 As Double
Dim v4 As Date
Dim v4a As Double
Dim loLetzteB&
Application.ScreenUpdating = False
'für Datenfilterung
Set wb = ThisWorkbook
Set Tb = wb.Sheets("Buchen_1087789")
v1 = Tb.Range("N7").Value       'später UF TextBox2.value
'Debug.Print "v1: " & v1
v2 = Tb.Range("N8").Value          'später UF TextBox3.value
'Debug.Print "v2: " & v2
v3 = Tb.Range("B10").Value      'erste Datum der Tabelle in Spalte B
'Debug.Print "v3: " & v3
v4 = v1 - 1                     'Anfangsdatum der Auswahl abzüglich 1 Tag als Kalendertag
'Debug.Print "v4: " & v4
v4a = v4                        'Anfangsdatum der Auswahl abzüglich 1 Tag als Zahl, erforderlich für Filtern
'Debug.Print "v4a: " & v4a
'Anfang - Auflistung der erforderlichen Summen
'1. Anfangssaldo der gewählten Tabelle gesamt = H10
'2. Endsaldo     der gewählten Tabelle gesamt - letzte beschriebene Zelle Spalt H
'3. Einnahmen    zwischen zwei gewählten Datums-Werte Spalte F bis gewähltem Datum
'4. Ausgaben     zwischen zwei gewählten Datums-Werte Spalte G bis gewähtlem Datum
'5. Anfangssaldo zwischen zwei gewählten Datums-Werte aus zu 1. zu 3. und 4.
'6. Einnahmen    zwischen zwei gewählten Datums-Werte Spalte F
'7. Ausgaben     zwischen zwei gewählten Datums-Werte Spalte G
'8. Summe von 6. und 7.
'9. Endsaldo     zwischen zwei gewählten Datums-Werte Spalte F + G + zu 5. Anfangssaldo
'Ende - Auflistung der erforderlichen Summen
'zu 1.      '= künftig UF - TB10
Dim ASaldoGes As String                     'benötigt für Auslesen 1. Anfangssaldo €
'Anfang - 1. Anfangssaldo in  € auslesen
ASaldoGes = Tb.Cells(10, 2).Offset(0, 6)
ASaldoGes = Format(ASaldoGes, "#,##0.00 €")
Debug.Print ASaldoGes & " zu 1. Anfangssaldo gesamt"
'Ende - 1. Anfangssaldo in  € auslesen
'Anfang - Filtern Bereich vom 1. Datum Tabelle bis vorletzte Datum vor Auswahl
loLetzteB = Tb.Range("B" & Rows.Count).End(xlUp).Row
If Tb.AutoFilterMode Then Tb.AutoFilterMode = False ' Autofilter ausschalten
Tb.Range("B9:H" & Cells(Rows.Count, 2).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=">=" & v3, Operator:=xlAnd, _
Criteria2:="=" & v1, Operator:=xlAnd, _
Criteria2:="
Nun möchte ich dieses Makro einbauen in die UF. Die Textbox2 = v1 und die TextBox3 = v2.
Kannst Du dir das bitte nochmals ansehen.
Gruss
Peter
Anzeige
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 12:02:33
Daniel
und wo genau ist jetzt das Problem?
kannst du das mal genauer beschreiben?
Bespieldatei?
wo hast du das, was ich dir geschrieben habe, in deinem Code umgesetzt?
Gruß Daniel
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 12:47:35
EtoPHG
Hallo Peter,
Falsch ist, dass die beiden Kriterien v3 und v4a unterschiedlich dimensioniert sind. Einmal vom Datentyp Date und das andere mal vom Datentyp String. IMHO sollten beide als Date dimensioniert werden!
Gruess Hansueli
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 12:57:46
Peter
Hallo Hansueli,
ich habe das Makro nochmals neu gefasst, so wie Daniel es gemeint hat.

Private Sub CommandButton33_Click()
Dim wb As Workbook
Dim Tb As Worksheet
''    Dim v1 As Double 'in den Zellen steht zwar ein Datum, verglichen wird aber mit der fortlaufenden Zahl
''    Dim v2 As Double
''    Dim v3 As Double
''    Dim v4 As Date
''    Dim v4a As Double
Dim v1 As Date 'in den Zellen steht zwar ein Datum, verglichen wird aber mit der fortlaufenden Zahl
Dim v2 As Date
Dim v3 As Date
Dim v4 As Date
Dim v4a As Date
Dim loLetzteB&
Application.ScreenUpdating = False
'für Datenfilterung
Set wb = ThisWorkbook
Set Tb = wb.Sheets("Buchen_1087789")
''Dim TB2 As Double
''TB2 = Me.TextBox2
''    v1 = Tb.Range("N7").Value       'später UF TextBox2.value
''    'Debug.Print "v1: " & v1
''    v2 = Tb.Range("N8").Value          'später UF TextBox3.value
''    'Debug.Print "v2: " & v2
''    v3 = Tb.Range("B10").Value      'erste Datum der Tabelle in Spalte B
''    'Debug.Print "v3: " & v3
''    v4 = v1 - 1                     'Anfangsdatum der Auswahl abzüglich 1 Tag als Kalendertag
''    'Debug.Print "v4: " & v4
''    v4a = v4                        'Anfangsdatum der Auswahl abzüglich 1 Tag als Zahl, erforderlich für Filtern
''    'Debug.Print "v4a: " & v4a
v1 = Format(CDate(TextBox2), "MM\/DD\/YYYY")
v2 = Format(CDate(TextBox3), "MM\/DD\/YYYY")
v3 = Tb.Range("B10").Value      'erste Datum der Tabelle in Spalte B
v3 = Format(CDate(v3), "MM\/DD\/YYYY")
v4 = v1 - 1                     'Anfangsdatum der Auswahl abzüglich 1 Tag als Kalendertag
v4a = v4                        'Anfangsdatum der Auswahl abzüglich 1 Tag als Zahl, erforderlich für Filtern
'Anfang - Auflistung der erforderlichen Summen
'1. Anfangssaldo der gewählten Tabelle gesamt = H10
'2. Endsaldo     der gewählten Tabelle gesamt - letzte beschriebene Zelle Spalt H
'3. Einnahmen    zwischen zwei gewählten Datums-Werte Spalte F bis gewähltem Datum
'4. Ausgaben     zwischen zwei gewählten Datums-Werte Spalte G bis gewähtlem Datum
'5. Anfangssaldo zwischen zwei gewählten Datums-Werte aus zu 1. zu 3. und 4.
'6. Einnahmen    zwischen zwei gewählten Datums-Werte Spalte F
'7. Ausgaben     zwischen zwei gewählten Datums-Werte Spalte G
'8. Summe von 6. und 7.
'9. Endsaldo     zwischen zwei gewählten Datums-Werte Spalte F + G + zu 5. Anfangssaldo
'Ende - Auflistung der erforderlichen Summen
'zu 1.      '= künftig UF - TB10
Dim ASaldoGes As String                     'benötigt für Auslesen 1. Anfangssaldo €
'Anfang - 1. Anfangssaldo in  € auslesen
ASaldoGes = Tb.Cells(10, 2).Offset(0, 6)
ASaldoGes = Format(ASaldoGes, "#,##0.00 €")
Debug.Print ASaldoGes & " zu 1. Anfangssaldo gesamt"
'Ende - 1. Anfangssaldo in  € auslesen
Me.TextBox10 = ASaldoGes
'Anfang - Filtern Bereich vom 1. Datum Tabelle bis vorletzte Datum vor Auswahl
loLetzteB = Tb.Range("B" & Rows.Count).End(xlUp).Row
If Tb.AutoFilterMode Then Tb.AutoFilterMode = False ' Autofilter ausschalten
Tb.Range("B9:H" & Cells(Rows.Count, 2).End(xlUp).Row).AutoFilter Field:=1, _
Criteria1:=">=" & v3, Operator:=xlAnd, _
Criteria2:="=" & v1, Operator:=xlAnd, _
Criteria2:="
Wenn ich das Makro mit Einzelschritt durchlaufen lasse, dann zeigen mir die Werte für v1, v2, v3, v4 und v4a ganz normales Datum an nicht jedoch das amerikanische, wo wie es als Format vorgegeben wurde. Dies wird offensichtlich nicht erkannt.
Kannst Du bitte prüfen, an was dies liegen kann.
Gruss
Peter
Anzeige
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 13:15:48
Daniel
Hi
Also wenn Daten aus einer Textbox übernommen werden sollen, wäre STRING der richtige Datentyp für die aufnehmende Variable!
Wenn man die Werte vorläufig aus der Exceltabelle liest und das ganze später auf Textbox umschreiben will, sollte man das Datum mit v1 = Tb.Range("N7").Text aus der Zelle lesen und nicht mit .Value.
Mit .Value ist das Datum eine fortlaufende ganze Zahl, mit .Text ist es ein Text, der so geschrieben ist wie er in der Zelle steht und damit entspricht das ganze dann der Textboxeingabe, so dass der weitete Code beim Wechsel dann unverändert übernommen werden kann.
Verwendet man über .Value den Zahlenwert des Datums, müsste auch der weitere Code anders geschrieben werden.
Und egal was man als Eingangswert hat, um den Autofilter in VBA zu programmieren, braucht man als Criterium das Datum als Text in der Anordnung Monat Tag Jahr mit dem Schrägstrich als Trennzeichen.
Gruß Daniel
Anzeige
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 13:35:09
Peter
Hallo Daniel,
ich habe jetzt das Ganze im Prinzip so umgebaut, wie Du es vorgeschlagen hast.
Jetzt habe ich nur noch ein kleines Problem:
Wie kann ich beim amerikanischen Format das Datum um 1 Tag weniger ausführen?
Ich habe z. Z. die Formel: v4 = Month(TB2) & "/" & Day(TB2) & "/" & Year(TB2)
Gruss
Peter
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 14:19:49
Daniel
Du musst aus dem Text der Textbox ein echtes Datum machen (mit CDate() oder DateValue()), von diesem Datum dann 1 abziehen und dir den neuen Datumswert im Amerikanischen Format ausgeben lassen.
Gruß Daniel
AW: Fehler beim Filtern UF Textbox Datum
17.06.2021 13:52:12
Peter
Hallo Daniel,
die letzte Frage hat sich erledigt.
Vielen Dank für die Hilfe.
Ich wünsche noch einen schönen Tag.
Gruss
Peter
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige