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

Datum an Autofilter übergeben

Datum an Autofilter übergeben
19.05.2021 17:56:12
Georg
Hallo zusammen,
wie übergebe ich ein Datum, dass in einer benamten Zelle abgelegt ist, per VBA an einen Autofilter einer Tabelle?
Ich hab es mal mit einer Variablen und CDbl probiert, bin aber gescheitert, obwohl ich es genau so gemacht zu haben, wie ich es in anderen Beiträgen im Forum hier gesehen hatte..... Dachte ich zumindest :-(
Name der Tabelle= TabData
Name der Zelle = nDatum_Referenz
Datum: z.B.: 01.03.2021
Dim v_ALT_SSD As Date
v_ALT_SSD = Range("nDatum_Referenz").Value
ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=17, Criteria1:=CDbl(v_ALT_SSD)
>
Ich hab mal die Datei hochgeladen.
https://www.herber.de/bbs/user/146278.xlsb
Was mach ich falsch?
Danke schon mal für Eure Hilfe!
Gruß Georg

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum an Autofilter übergeben .. :-(
19.05.2021 18:18:10
Georg
Hallo Hajo,
danke! Wenn ich es richtig aus deiner Datei gezogen habe, muss ich das Datum zweimal eingeben (einmal =).
Bei mir klappt der Code aber auch dann nicht. Er filtert nachwievor immer komplett alle Zeilen weg. Im benutzerdefinierten Filter steht dann zwar der korrekte Zahlenwert für das Datum (44256 für den 01.03.2021), nur alle Zeilen sind halt weg.
?
Gruß Georg
Anzeige
AW: Datum an Autofilter übergeben
19.05.2021 18:25:14
Daniel
Hi
1. du solltest beim kürzen der Beispieldatei darauf achten, dass du nicht Sachen löschst, die für deine Fragestellung relevant sind.
hier fehlt bspw das Tabellenblatt, auf dem das Datum steht nach dem gefiltert werden soll.
2. Datum ist in Excel immer kitisch. In der Exceltabelle ist das Datum zwar immer eine einfache Zahl, sobald aber VBA ins Spiel kommt gilt das nicht mehr so ohne weiteres.
um deinen Code ans laufen zu bringen, gibts zwei möglichkeiten:
a) du lässt den Code zum Filtern wie er ist, Da du aber explizit nach einer Zahl filters, muss in den Zellen auch eine Zahl stehen, also müsstest du das Zahlenformat der Spalte 17 auf "Standard" stellen, dann würde dein Code laufen
b) du änderst den Code so ab, dass er für Datumswerte funktioniert. um rauszufinden, was du dazu tun musst, solltest du einfach mal den Filter anwenden und dann das Ergebnis mit dem Recorder aufzeichnen. das hilft meistens.
bei mir kommt dann folgendes Ergebnis raus:

ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=17, Operator:= _
xlFilterValues, Criteria2:=Array(1, "3/1/2021")
dh du brauchst zum Filtern nach einem bestimmten Datum folgendes:
- ein Array mit zwei Werten:
der erste Wert gibt an, nach dem genauen Tag, (1), dem Monat des Datums (2) oder dem Jahr des Datums gefiltert werden soll (3)
der zweite Wert ist dann das Datum in Textform in amerikanischer Schreibweise, dh Monat-Tag-Jahr mit dem Schrägstrich als Trennzeichen
also als ganzes dann so:

... .AutoFilter Field:=17, Operator:=xlFilterValues, Criteria2:=Array(1, Format(v_ALT_SSD, "m\/d\/yyyy"))
Gruß Daniel
Anzeige
klasse - danke!
19.05.2021 22:10:23
Georg
Hallo Daniel,
vielen Dank! Das sieht gut aus.
Ich hab eben noch probiert, ob sich der Format Befehl auch bei der Zuweisung der Variablen schon einbauen lässt. Wenn ich die Definition ändere klappt es auch und die Zeile ist nicht ganz so lang. Was bedeuted das "\/" in dem FormatBefehl eigentlich?
>
Dim v_ALT_SSD As String
v_ALT_SSD = Format(Range("nDatum_Referenz").Value, "m\/d\/yyyy")
ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=17, Operator:=xlFilterValues, Criteria2:=Array(1, v_ALT_SSD)
Das mit dem fehlenden Datumsfeld hatte ich dann auch irgendwann bemerkt - peinlich, peinlich! Sorry dafür.
Nochmal Danke für die prima und schnelle Hilfe mit solch umfangreichen Erklärungen!!
Georg
Anzeige
AW: klasse - danke!
20.05.2021 14:55:37
Daniel
HI
im Format-Befehl gibts sog. Funktionszeichen, die nicht das Zeichen selbst bedeuten, sondern eine Funktion haben wie z.b "Dezimalzeichen", "TausenderTrennzeichen" oder die Symoble H,M,S für Stunden, Minunten, Sekunden.
ebenso ist der Slash "/" aus dem Amerikanischen das Symbol für die Datumstrennung.
das Problem ist, dass diese Funktionszeichen, die in der Programmierung immer amerikanisch angegeben werden müssen, in der Ausgabe in die jeweiligen Zeichen gemäß der Ländereinstellung übersetzt werden, dh aus dem amerikanischen Dezimalzeichen "." wird das deutsche ",", aus dem amerikanischen Datumstrennzeichen "/" wird der deutsche "."
da wir aber in unserem Textstring den "/" benötigen, müssen wir diesen als normales Zeichen in unseren Formatstring einfügen, damit er nicht mehr umgewandelt wird.
Dazu gibt es zwei Möglichkeiten:
a) man setzt die Zeichen, die keine Funktionszeichen" sein sollen in Anführungszeichen
b) man setzt vor das Zeichen den Backslash
der Backslash gilt dann immer nur für das direkt folgende Zeichen, Anführungszeichen würde man verwenden wenn es eine längere Zeichenkette ist.
Gruß Daniel
Anzeige
Ähh...?
20.05.2021 21:23:23
Georg
Ah, das ist dann aber schon Level 2.0!
Müsste man es dann nicht auch so schreiben können:
>
v_ALT_SSD = Format(Range("nDatum_Referenz").Value, "m" / "d" / "yyyy")
Er akzeptiert es zwar, aber beim Durchlauf kommt ein Fehler "Typen unverträglich" ?
Nicht wirklich wichtig, nur weil ich gerade dran rumspiele.
AW: Ähh...?
20.05.2021 21:43:19
Daniel
Ja, geht auch aber wenn dann so:
Format(Range("nDatum_Referenz").Value, "m"" / ""d"" / ""yyyy")
Anführungszeichen, die Bestandteil eines Textes sind, müssen verdoppelt werden, um die von den Anführungszeichen zu unterscheiden, die den Text begrenzen.
Daher nimmt man bei einzelnen Zeichen eher den Backslash.
Der Typfehler kommt, weil du mit nur einem Anführungszeichen versucht, den Buchstaben "m" durch den Buchstaben "d" zu dividieren.
Gruß Daniel
Anzeige
klaro - danke!
25.05.2021 08:35:25
Georg
ist so gesehen eigentlich ja logisch - ich hab die Denke nur noch nicht genug drauf - vielen Dank für die Nachhilfe!
AW: Datum an Autofilter übergeben
20.05.2021 07:15:54
Luschi
Hallo Daniel,
eine sehr Datei zum Autofilter findet man hier: https://www.excelcampus.com/vba/macros-filters-autofilter-method/
Darin steht zu Array(1 Folgendes:
'First dimension of array is the time period group
'0-Years '1-Months
'2-Days '3-Hours
'4-Minutes '5-Seconds
Leider macht Excel 2019 bei der Verwendung von Operator:=xlFilterValues in Verbindung mit Datumswerten immer noch schlapp.
So wurde dieses Makro aufgezeichnet:

ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=17, Operator:= _
xlFilterValues, Criteria2:=Array(2, "1/3/2021")
Aber beim Abspielen kommt es zur Fehlermeldung:
LzF 1004: Die AutoFilter-Methode des Range-Objektes konnte nicht ausgeführt werden.
In Excel 2013 lauft dieses Makro problemlos.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Datum an Autofilter übergeben
19.05.2021 19:13:24
Beverly
Hi Georg,
ich nehme an, es liegt an der Zellformatierung. Die benannte Zelle nDatum_Referenz gibt es bei dir aber nicht, weshalb ich dies nicht überprüfen kann.
Aber versuche es mal so:

Dim v_ALT_SSD As Date
Dim strFormat As String
v_ALT_SSD = Range("nDatum_Referenz").Value
strFormat = ActiveSheet.ListObjects("TabData").DataBodyRange.Columns(17).Cells(1).NumberFormat
ActiveSheet.ListObjects("TabData").Range.AutoFilter Field:=17, Criteria1:="=" & Format(v_ALT_SSD, strFormat)

GrußformelBeverly's Excel - Inn
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige