Guten Tag,
es wird per VBA ein AutoFilter-Makro auf ein Datumsfeld (Erstelldatum) angewandt.
strDate = „30.09.2009“
Selection.AutoFilter Field:=6, Criteria1:=DateValue(strDate), Operator:=xlOr
Es soll später variabilisiert werden, hier aber ausreichend!
Beispiel
Ersteller | Erstelldatum | …
Hr. Test | 30.09.2009 |…
Spalte „Erstelldatum“ wird auf den 30.09.2009 gefilter. SO WEIT SO GUT !
Es wird also als Input im VBA-Makro ein dt. Datum als Filter verwendet, welches vor finaler Filterung aber noch in ein internes Format (Funktion DateValue) umgewandelt wird. Will man jetzt nach Makroausführung den Wert manuell anpassen, indem man auf den Pfeil für den benutzerdefinierten Filter für das Erstelldatum klickt, dann wird das amerikanische Format ausgegeben. Würde man jetzt auf OK gehen, dann würde der Filter eine leere Menge anzeigen, da das „amerikanische“ Datum in der Liste nicht existiert.
Darstellung im AutoFilter jetzt!
Erstelldat. |
entspricht | 9/30/2009
Frage nun: Wie kann ich innerhalb von VBA erreichen, dass dieses Dialogfeld „Benutzerdefinierter Filter“ den deutschen Datumswert anzeigt, so dass man hier mit dem gewohnten Datumsformat arbeiten kann und das Klicken auf „OK“ auch wieder die bereits per Makro gefilterte Liste anzeigt , ansonsten wird es überflüssige Rückfragen von den Anwendern geben, abgesehen von dieser unverständlichen Konvertierung zwischen VBA und Excel. Eine Lösung wäre evtl. , dass man das Control per Methode aus irgendeiner DLL mit den entsprechenden Werten versorgt. Nur dafür müsste man wahrscheinlich aus das Handle des Controls kennen und auch die entsprechenden weiteren Parametrisierungen!
Randbedingungen:
Ich weiß, dass es eine Notlösung gibt, die aber nicht praktikabel ist. Diese lautet wie folgt!
strDate = „30.09.2009“
Selection.AutoFilter Field:=6, Criteria1:=">=" & CDate(strDate), Operator:=xlOr, _
Criteria2:="= 02.10.2009. Damit würde diese Notlösung nicht mehr zum gewünschten Resultat führen können, da man ja für ein Einzeldatum dann 2 Bedingungen bräuchte und somit die 2. gar nicht mehr eingebbar wäre!
Grüezi red.cross
es wird per VBA ein AutoFilter-Makro auf ein Datumsfeld
(Erstelldatum) angewandt.
strDate = „30.09.2009“
Selection.AutoFilter Field:=6, Criteria1:=DateValue(strDate)
Frage nun: Wie kann ich innerhalb von VBA erreichen, dass
dieses Dialogfeld „Benutzerdefinierter Filter“ den deutschen
Datumswert anzeigt, so dass man hier mit dem gewohnten
Datumsformat arbeiten kann und das Klicken auf „OK“ auch
wieder die bereits per Makro gefilterte Liste anzeigt ,
ansonsten wird es überflüssige Rückfragen von den Anwendern
geben, abgesehen von dieser unverständlichen Konvertierung
zwischen VBA und Excel.
Datumswerte sollten nie nach Format gefiltert werden, das dies - wie Du festgestellt hast - immer von der Lokalisierung abhängig ist.
Filtere stattdessen nach dem zugrunde liegenden Double-Wert, damit sollest Du dann in allen Sprach-Versionen erfolgreich sein.
Deine Filterzeile lautet dann also:
Selection.AutoFilter Field:=6, Criteria1:=CDbl(DateValue(strDate))
…wobei Selection. hier auch nicht gerade ‚elegant‘ ist und Du besser genau referenzieren solltest.
Mit freundlichen Grüssen
Thomas Ramel
Hallo Thomas,
vielen Dank für Deine schnelle Antwort. Leider funktioniert diese nicht. Es wird KEIN Wert gefiltert (Liste komplett leer, alle gefüllten Einträge ausgeblendet). Im benutzerdefinierten AutoFilter steht „entspricht“ „40086“. Mit diesem (internen) Zahlwert für das Datum kann er mit der Option „entspricht“ keinen Wert filtern. Von hand funktioniert das aber sehr wohl. Wenn Du Interesse hast, könnte ich Dir das Excel-Sheet mal zukommen lassen!
VG
Red
Grüezi Red
vielen Dank für Deine schnelle Antwort. Leider funktioniert
diese nicht. Es wird KEIN Wert gefiltert (Liste komplett leer,
alle gefüllten Einträge ausgeblendet). Im benutzerdefinierten
AutoFilter steht „entspricht“ „40086“. Mit diesem (internen)
Zahlwert für das Datum kann er mit der Option „entspricht“
keinen Wert filtern. Von Hand funktioniert das aber sehr wohl.
Ja, ich hatte mich da etwas verfranst.
Die einzige Möglichkeiten sind die, die Du bereits kennst:
–
Mit freundlichen Grüssen
Thomas Ramel
Wenn Du Interesse hast, könnte ich Dir das Excel-Sheet mal
zukommen lassen!
Hallo Red,
machs anders rum, lade die Mappe hoch mit FAQ:2606
Dann steht es Thomas und anderen frei sich die Mappe runterzuladen oder nicht.
Ein Vorteil dabei ist, er muß das Ganze nicht nachbauen mit der Ungewißheit ob sein Nachbau in der Struktur auch deinen Daten entspricht.
Grad bei Datümern geht es da um Zellformatierungen u.v.m.
Gruß
Reinhard
Hallo Thomas,
habe eine Beispieldatei auf ein WebAccount geladen (Excel 2003).
Site: http://www.mydrive.ch
Benuter: guest@touran , pass: excel2003
Bleibt die nächsten 3 Tage aktiviert!
Dort gibt es nur 1 Unterverzeichnis mit der Excelbeispieldatei. In dieser sind auch Schaltflächen enthalten. Filter 30.09.2009 führt das Makro aus, welches ich schon beschrieben habe!
VG
Red
Grüezi Red
habe eine Beispieldatei auf ein WebAccount geladen (Excel
2003).
Filter 30.09.2009 führt das Makro aus, welches ich
schon beschrieben habe!
Ja, das ist exakt die Situation, die Du geschildert hat - und Lösungen wie Du sie gerne hättest gibt es IMO keine.
Das ist eine Frage der Lokalisierung versus VBA - und VBA ‚spricht‘ nunmal eben Englisch.
Mit freundlichen Grüssen
Thomas Ramel
Hallo Thomas,
oberflächlich ist das so wie es aussieht der Stand, allerdings muß es eine Lösung geben, die aber tiefer liegt (im Control/Objekt für den Autofilter). Excel selbst wandelt ja einen ausgewählten Datumswert (30.09.2009) wenn man diesen manuell auswählt in einen internen um und filtert. Erneutes Anwählen des Filters zeigt dann dann Datum auch korrekt an (immer noch 30.09.2009). Fazit: Intern kann der Autofilter die eingegeben Werte irgendwo wegspeichern und wiedereinstellen. Allerdings ist das WIE hier der Kasus Knaktus. Daher meine Idee Referenz auf das Objekt Autfilter bekommen und gespeicherte Werte auslesen und ggf. manipulieren, so wie es im Dialog geht. Genau hier fehlt mir dann das tiefgehende Wissen. Ich habe irgenwo schon einmal gelesen, daß man solche Referenzen ermitteln kann, ob solche Werte dann änderbar sind ist die 2. Frage!
VG
Red
Grüezi Red
Ob und wie das ggf über einen Zugriff auf das Ojekt möglich ist kann ich nicht beantworten. Excel selbst bietet hier keine Objekte, Methoden oder Eigenschaften an. Allenfalls gibt es einige API
Meines Erachtens ist das Verhältnis von Aufwand zu Nutzen den Aufwand hier auch nicht wirklich wert.
–
Mit freundlichen Grüssen
Thomas Ramel