unverträglicher Datentyp
Hallo zusammen,
ich habe wiedermal ein Problem. Ich habe einen Filter kreiert, der sich durch die Eingabe in mehrere Textfelder auf einem Formular zusammenbauen lässt. Wenn ich nun aber den Filter anwenden möchte kommt die Fehlermeldung: Laufzeitfehler 3464: Datentypen in Kriterienausdruck unverträglich. Mein code ist:
Option Compare Database
Private Sub Filter2_setzen()
Dim DatVon As Date
Dim DatBis As Date
Dim Filterbedingung2 As String
If Not IsNull(Me!Bearbeiter) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "Bearbeiter = " _
& Chr(34) & Me!Bearbeiter & Chr(34)
End If
If Not IsNull(Me!DatVon) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " _
& Chr(34) & Me!DatVon & Chr(34)
End If
If Not IsNull(Me!DatBis) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " _
& Chr(34) & Me!DatBis & Chr(34)
End If
Me.Filter = Filterbedingung2
Me.FilterOn = True
End Sub
Private Sub Bearbeiter_AfterUpdate()
Call Filter2_setzen
End Sub
Private Sub DatVon_AfterUpdate()
Call Filter2_setzen
End Sub
Private Sub DatBis_AfterUpdate()
Call Filter2_setzen
End Sub
Ich denk mal man muss die Textfelder als Datum deklarieren. Aber ich hab da keine Ahnung wie des funktioniert. Ich bin im VBA ein rechter Anfänger.
Der Filter soll durch die beiden Textfelder DatVon bzw. DatBis mehrerer Daten(Datums) vergleichen. Das Steuerelement ist in der Tabelle als Datum/Uhrzeit definiert.
Antwort schreiben
Antwort 1 von Marie vom 31.01.2020, 03:45 Options
Zitat:
If Not IsNull(Me!DatVon) Then
stattdessen schreibst Du "If isDate"
Gruß Marie
Also ich hab jetzt
If IsDate(Me!DatBis) Then
geschrieben, aber es kommt immer noch der selbe Fehler.
Gruß Tobias
Antwort 3 von lorf55 vom 31.01.2020, 15:47 Options
Wenn
[quote]Dim DatVon As Date
Dim DatBis As Date[/quote]
denn ist:
[quote]Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " _
& Chr(34) & Me!DatVon & Chr(34)[/quote]
falsch, weil Date kein String ist (chr(34) steht für " ).
Die Access2000-Hilfe meint dazu:
Formulare!Personal.Filter = "[Einstellungsdatum] >= #" _
& Formulare!Personal!Einstellungsdatum & "#"
Sorry, aber des hat mich leider nicht weiter gebracht. Es kommt immer noch der selbe Fehler.
Antwort 5 von lorf55 vom 01.02.2020, 07:09 Options
Du hast also beide Bedingungungen so stehen:
Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " _
& "#" & Me!DatVon & "#"
Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " _
& "#" & Me!DatBis & "#"
Und was steht in Me!DatVon und Me!DatBis?
Du kannst ja mal einen Haltepunkt setzen (auf den linken Rand im VBA-Editor klicken) und denn starten und ab Haltepunkt bis Fehler mit F8 durchgehen. Und wenn du mit der Maus über der Variablen bist, zeigt er dir den aktuellen Wert. Oder du schaust ihn dir im Überwachungsfenster an.
In Me!DatVon bzw. Me!DatBis steht dann zum Beispiel das Datum 01.01.2008. So wie ich es im Tesxtfeld auf dem Formular eingegeben habe.
Antwort 7 von lorf55 vom 01.02.2020, 10:28 Options
Und in welcher Zeile kommt der Laufzeitfehler und wie sind die relevanten Werte dann?
Hallo lorf55,
danke für deine Hilfe, aber ich hab mein Problem schon gelöst.
Ich hab nun
Dim Filterbedingung2 As String
If Not IsNull(Me!Bearbeiter) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "Bearbeiter = " _
& Chr(34) & Me!Bearbeiter & Chr(34)
End If
If IsDate(Me!DatVon) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "eingangsdatum >= " & Format(Me!DatVon, "\#yyyy\-mm\-dd\ hh:nn:ss#")
End If
If IsDate(Me!DatBis) Then
If Filterbedingung2 <> "" Then
Filterbedingung2 = Filterbedingung2 & " AND "
End If
Filterbedingung2 = Filterbedingung2 & "eingangsdatum <= " & Format(Me!DatBis, "\#yyyy\-mm\-dd\ hh:nn:ss#")
End If
geschrieben.
Gruß Tobias