PDA

Vollständige Version anzeigen : Filter funktioniert nicht


paddy3911
25.08.2017, 09:46
Hi,

ich habe ein Problem. Ich möchte eine Tabelle per Button automatisch filtern. dazu nutze ich bei Buttonclick folgendes:

ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=36, Criteria1:= _
">=01.08.2017", Operator:=xlAnd, Criteria2:="<=31.08.2017"

Die Liste wird dann auch gefiltert, allerdings ohne Ergebnis. Wenn ich dann per Hand den Filter nochmal öffne und mit OK bestätige, filtert er es dann richtig.
Was kann da der Fehler sein ?
Wie kann ich eine Liste sonst noch Filtern ?

Über jede Hilfe wäre ich sehr dankbar :)

RPP63neu
25.08.2017, 09:55
Moin!
Ist ein bekannter "Bug"!
Der Makrorekorder liegt fast immer falsch, wenn er einen String aufzeichnet.
Ungetestete Lösung:
Übergib den String in englischer Schreibweise:
">=2017/08/01"
Wenn dies nicht klappen sollte, probiere dies:
">=" & Dateserial(2017, 8, 1)

Gruß Ralf

Der Steuerfuzzi
25.08.2017, 09:56
Hallo,

das Datum muss als Zahl rein, nicht als Text!

Schau mal z.B. hier: http://www.makro-excel.de/2015/12/27/mit-vba-nach-datum-filtern/

Evtl. könnte auch eine Umwandlung des Datumstrings mit CDate funktionieren.

RPP63neu
25.08.2017, 10:08
Gerade getestet:
Der englische Datum-String wird korrekt erkannt.

Überm Tellerrand (falsch aufgezeichneter String):
Eine Datenüberprüfung, Liste, Quelle kann ich ja per a;b;c einrichten.
Der Rekorder zeichnet auf:
Formula1:="a;b;c"

Dies ist zwar lauffähig, liefert aber das falsche Ergebnis!
Tausche ich das Trennzeichen ins englische Komma, löppt dat:
Formula1:="a,b,c"


Gruß Ralf

paddy3911
25.08.2017, 10:16
Danke für eure schnellen Antworten.

Leider läuft es bei mir noch immer nicht... Wenn ich den ersten Tipp ausprobiere, bekommen ich folgende Meldung:

"Laufzeutfehler 1004 - Die AutoFilter-Methode des Range-Objektes konnte nicht ausgeführt werden."

Ich möchte ja Spalte nach Spalte "AJ" ab Zeile 2 - Ende der Tabelle.

Hmmm :(

RPP63neu
25.08.2017, 10:23
Hmmm :(
Hmmmmmmmmmmmmm
Blattschutz?
(denn meine Methode(n) funktionieren einwandfrei)

Gruß Ralf

paddy3911
25.08.2017, 10:31
Dim Datum1 As Date, Datum2 As Date

Columns("AJ:AJ").NumberFormat = "dd/mm/yyyy;@"

Datum1 = "31.10.2000"
Datum2 = "31.10.2020"

ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=36, Criteria1:=">=" & CDbl(Datum1), Operator:=xlAnd, Criteria2:="<=" & CDbl(Datum2)




So funktioniert es nun. Aaaaaaber... Ich möchte das Start und End-Datum in Textboxen festlegen. Wie kriegt man das noch hin ?

Erstmal aber mal wieder DAAAANKE für die schnelle tolle Hilfe :)

paddy3911
25.08.2017, 11:07
Also nochmal genauer beschrieben und etwas anders als zuvor erwähnt.

Ich möchte jetzt zwei ComboBoxen haben. ComboBox1 = Monat und ComboBox2 = Jahr.

Der Zeitraum der gefiltert wird soll immer gleich sein. Heißt wenn ich Januar und 2017 auswähle, möchte ich nun den Bereich (Gleich und mehr) 25. Dezember 2016 bis (Gleich und weniger) 24. Januar 2017.

Fortlaufend dann wenn ich Februar und 2017 auswähle soll dann vom 25. Januar 2017 - 24. Februar 2017 gefiltert werden.

Kann mir da nochmal jemand zur Seite stehen ? Das würde mich sehr freuen :-/

RPP63neu
25.08.2017, 11:39
Soll ich mir/Dir jetzt was basteln oder trittst Du in Vorleistung?

Fragt sich Ralf

paddy3911
25.08.2017, 11:45
Also ein Ansatz wie man das realisieren könnte wäre cool. Ansonsten möchte ich hier natürlich keine Arbeit verlangen. Wenn dies zu aufwendig ist, muss ich mich damit dann leider zufrieden geben.

Trotzdem danke ich euch :)

Der Steuerfuzzi
25.08.2017, 11:52
Hier mal ein Vorschlag:
Datum1 = Dateserial(CInt(Combobox2), CInt(Combobox1)-1, 25)
Datum2 = Dateserial(CInt(Combobox2), CInt(Combobox1), 24)

paddy3911
25.08.2017, 11:56
Danke Dir :)

Damit bin ich allerdings grade überfordert.. Was bewirkt Dateserial(CInt(Combobox2), CInt(Combobox1)-1, 25) und wie kann ich das noch anpassen ?

paddy3911
25.08.2017, 12:18
Wenn ich das nun so ersetze, kommt als Fehlermeldung:

Typen unverträglich

:-/

paddy3911
25.08.2017, 12:22
Das Typen unverträglich kommt auf wenn ich

Datum1 = TextBox1.Value
Datum2 = TextBox2.Value

verwende...

RPP63neu
25.08.2017, 13:33
Moin noch mal!
Du hast keine Ahnung, was nicht tragisch ist, denn alle fangen mal an.
Ich schrieb Dir ja oben bereits, dass Du in Vorleistung treten musst, damit Dir überhaupt geholfen werden kann.
Damit meinte ich den derzeitigen Stand Deiner Mappe, die Du als Exceldatei unter Erweitert, Anhänge verwalten hochladen solltest.

Gruß Ralf

Hasso
25.08.2017, 13:53
Hallo paddy,

versuch mal:Datum1 = CDate(TextBox1.Value)
Datum2 = CDate(TextBox2.Value)Textboxen haben, wie der Name schon vermuten lässt, als Inhalt Text - der muss in ein Datum umgewandelt werden (was natürlich nur funktioniert, wenn der String im Textfeld ein gültiger Datumsausdruck ist).

RPP63neu
25.08.2017, 14:18
Es ehrt Dich, Hasso!
Aber eben (#8) waren es noch ComboBoxes, jetzt TextBoxes.
Ich code nix, bevor ich die Datei sehe.

Two Cents
Ralf

paddy3911
25.08.2017, 15:00
Ich taste mich da langsam ran an das Thema.. Sehr langsam :P

Hier die Datei.

Ich kann garnicht oft genug Danke sagen.

Zeitraum ist immer vom 25 des vorherigen bis zum nächsten 24 (inklusive)

Der Steuerfuzzi
25.08.2017, 15:28
Na jetzt kommt Licht ins Dunkel. Die Monate sind als Text hinterlegt.

Versuch es mal so:
Datum2 = CDate("24. " & ComboBox1 & " " & ComboBox2)
Datum1 = DateSerial(Year(Datum1), Month(Datum1) - 1, 25)

EDIT: Datum1 und Datum2 sind im Filter "vertauscht" (Beginndatum = Datum2 und Enddatum = Datum1)

Hasso
25.08.2017, 16:08
Mit Steuerfuzzis Hilfe habe ich jetzt folgenden funktionierenden CodeOption Explicit
Private Sub CommandButton1_Click()
Dim Datum1 As Date, Datum2 As Date
Columns("AJ:AJ").NumberFormat = "dd/mm/yyyy;@"


'Juli 2017

Datum1 = CDate("24. " & ComboBox1 & " " & ComboBox2)
If Month(Datum1) <> 1 Then
Datum2 = DateSerial(Year(Datum1), Month(Datum1) - 1, 25)
'Sonderfall Januar:
Else
Datum2 = DateSerial(Year(Datum1) - 1, 12, 25)
End If

ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter Field:=2, Criteria1:= _
">=" & CDbl(Datum2), Operator:=xlAnd, Criteria2:="<=" & CDbl(Datum1)

End Sub