2016-06-06 4 views
0

Ich habe ein Formular, in dem ich ein Unterformular mit einer Tabelle verknüpft, die verschiedene Spalten und Zeilen enthält, von denen eine Spalte des Datums erstellt ist. In dieser Form gibt es einen Knopf, der das Unterformular filtert, so dass es alle Datensätze zeigt vor einem Jahr von der Hälfte starten, hier ist der Code für die VariableMS Access 2010 Formularfilter funktioniert nicht mit dem letzten Jahr

startDate_S = Replace(Format(DateAdd("m", -6, Date), "mm/dd/yyyy"), ".", "/") 

Und der Filter selbst

ProbSub.Form.Filter = "[Date Created] > #" & startDate_S & "#" 

Das DateAdd() setzt das aktuelle Datum um 6 Monate zurück, Format() und Ersetzen() ändern das Datumsformat auf das amerikanische anstelle des lokalen Datums (MS Access Filter verwenden nur diesen Standard). Ich benutze eine Nachrichtenbox, um zu sehen, dass die Formatierung korrekt ist, es gibt "12/06/2015" zurück. Aber es gibt keine der Zeilen zurück (ich habe 3 mit den Erstellungsdatumswerten von "06/03/2016"). Durch Debugging habe ich festgestellt, dass dies nur auftritt, wenn das Startdatum vor einem Jahr oder später liegt, zB wenn startDate_S "01.01.2016" oder höher ist, aber wenn es "31.12.2015" oder niedriger ist Es tut nicht.

Antwort

0

Es gibt Bedarf für ersetzen:

startDate_S = Format(DateAdd("m", -6, Date), "mm\/dd\/yyyy") 

Ihre Filter sollte funktionieren, wenn [Date Created] vom Datentyp Datum ist, aber nicht, wenn ist Text. Wenn ja:

ProbSub.Form.Filter = "DateValue([Date Created]) > #" & startDate_S & "#" 
+0

Ja! Das "Erstellungsdatum" war tatsächlich ein Textfeld aufgrund des Formats, in dem es sein musste. Die Verwendung von DateValue(), um es im Filter zu konvertieren, funktionierte perfekt! –

+0

Wie Sie sehen, sollten Sie Daten immer als Date speichern. Es ist ein Wert ohne Format. Ein Format wird nur für die Anzeige oder Verkettung des Wertes mit Text benötigt. – Gustav

Verwandte Themen