Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Autofilter auf Datum funktioniert nicht
#1
Thumbs Up 
Hallihallo,

ich verzweifle an der depperten Autofilterfunktion in  vba. (Alleine, dass man bei mehr als zwei Kriterien in einem Kriterienarray keine Wilcards in Strings einbauen darf, hat mich Stunden gekostet).
Jetzt hocke ich da und mir raucht der Kopf wegen einem Datumsfilter.

Ausgangslage:
Eine Tabelle mit einer Spalte mit Datumsangaben im Format YYYY-MM-DD. Egal welches Format ich in der Tabelle selbst festlege (auch wenn ich von Standard explizit auf Datum umstelle), bleibts beim String "YYYY-MM-DD".

Maßnahme: Ich bereininge die Daten sowieso schon zeilenweise, also habe ich eine Typkonversion eingebaut: CDate (String).... und damit habe ich dann jede Zelle überschreiben.
=> War erfolgreich. Im VBA-Editor sehe ich jetzt als Typ Variait/Date statt Variant/String und wenn man jetzt in der Tabelle das Datumsformat ändert, dann funktioniert das auch. Auch beim Filter werden jetzt Datumsfilter angezeigt und nicht mehr Textfilter.

Damit kann das Filtern mit Autofilter mit Date-Variablen als Kriterium ja nicht mehr schwer sein....
Bspw. Worksheets("Imported data").Range("A1").AutoFilter 4, ">=" & daStartDate
(dStartDate ist vom Format Date).


Ergebnis: Tabelle leer. Alles weggefiltert.
Also hab ich mir den Filter in der Tabelle angeschaut.
Aktiviert ist: Datumsfilter -> benutzerdefinierter Filter -> "ist nach oder gleich" -> korrektes Datum.

WTF. Stimmt doch alles.

Und jetzt kommts.
Ich ändere nichts (!) und drücke nur OK und schwupps ist die Tabelle perfekt gefiltert und die Daten sind da.


Ich mag nicht mehr und bin für jeden Denkanstoß dankbar.
Antworten Top
#2
Hallo, 19 

Datum und VBA ist - wenn das Datum nicht im amerikanischen Format ist - etwas zickig. Dodgy

Probiere es mal mit Cdbl oder DateSerial.

.xlsb   Autofilter_Datum_Bereich_zwei_Zellen_mit_Clng_oder_DateSerial.xlsb (Größe: 29,78 KB / Downloads: 3)

Die Beispieldatei soll dir das nur etwas verdeutlichen. 21
________
Servus
Case
[-] Folgende(r) 1 Nutzer sagt Danke an Case für diesen Beitrag:
  • Duderinho
Antworten Top
#3
Ich bin weitergekommen...
Zum Vergleichen habe ich den Makro-Recorder verwendet und witzigerweise hat der Code dann auch nicht funktioniert. Das war ein Filter auf "Criteria1:=">=15.01.2022".  (Von Excel selbst generiert!!!)
Was dann sehr wohl funktioniert hat war die Variante Criteria1:=">=01/15/2022".
Gut gemacht Microsoft....
 
Insofern vielen Dank für den Hinweis mit dem US-Format des Datums.


Was jetzt tatsächlich funktioniert ist ein verkorkstes Durcheinander von Datentypen.
Quelle: Text im Format YYYY-MM-DD.

1. Zeilenweise die Zelle mit dem Datum mit CDate konvertieren. Heraus kommt wie erwähnt Variant/Date.

2. Start- und Enddatum, die im Format Date vorliegen, in eine Stringvariable schreiben:
sStartDate = Month(daStartDate) & "/" & Day(daStartDate) & "/" & Year(daStartDate)

3. Autofilter setzen
Worksheets("Imported data").Range("A1").AutoFilter 4, ">=" & sStartDate, xlAnd, "<=" & sEndDate

Klingt komisch.... ist es auch.

War ja auch naiv zu denken, man könne Date-Daten mit Date-Variablen filtern, wenn man kein US-Amerikaner in den USA ist...


Danke jedenfalls für den Support. Mit Umwandlung in Double hätte es bestimmt auch geklappt.
Antworten Top
#4
(09.01.2023, 17:50)Duderinho schrieb: Mit Umwandlung in Double hätte es bestimmt auch geklappt.
Bei Datum: Wandlung in Long. 

Vorteile:
- Date-Variablen bleiben Date; Date ist wie Long eine Zahl.
- keine Verrenkungen mit Stringverkettungen

Zu den Stringverkettungen schau dir auch mal die Methode Format() an.

Der Makrorekorder ist maximal eine Krücke, um Einsteigern zu helfen, ernstzunehmender Code wird da nicht produziert und das war sicher auch nie das Ziel. Auf MS einzudreschen nutzt da wenig, genauso wenig wie der immer wieder angebrachte Hinweis, dass man ja mal googeln könnte, bevor man eine Frage das Millionste Mal stellt… ;)
Hat Dir mein Beitrag geholfen? Dann hilf auch Du - mit einer Spende an Wikipediadie Tafeln oder aktion-deutschland-hilft.de
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste