2017-07-07 9 views
0

Ich habe ein Arbeitsblatt Aufträge, die eine Spalte von nach Datum abgeschlossen haben. Ich versuche, es zu filtern, um alle Bestellungen mit Daten in der Vergangenheit bis zum Ende des aktuellen Monats (EX: alle vergangenen Bestellungen-Ende Juli 2017) zu zeigen.VBA-Code für die Filterung durch den aktuellen Monat

Der aktuelle Code, den ich benutze funktioniert, aber aus irgendeinem Grund nicht zurück 7/31/2017. Es wird alle vorherigen Daten bis zum 30.07.2017 zurückgeben. Kann mir bitte jemand helfen.

Sub Macro3() 
Dim dtStart As Date 
Dim dtFinal As Date 

dtStart = CDate(Evaluate("DATE(YEAR(NOW()),-1,1)")) 
dtFinal = CDate(Evaluate("EOMONTH(NOW(),0)")) 

ActiveSheet.Range("$A$1:$N$709").AutoFilter 13, ">=" & dtStart, xlAnd, "<=" & 
dtFinal, Operator:=xlFilterDynamic 
End Sub 

Antwort

0

dtFinal ist 31. Juli 2017 um 12:00 Uhr. Sie möchten Ihr endgültiges Datum am 1. August abgeben und dann Ihren Filter von "<=" zu "<" ändern.

+0

Das funktionierte! Die Daten, die ich habe, stammen von einem Dynamics AX-Set, daher wurde die Zeit um 7 Uhr morgens und nicht um 12 Uhr morgens angegeben (ich muss mir wirklich keine Gedanken über die Zeit machen, nur das Datum). Ich musste das nur korrigieren. Danke! – Emartin1863

0

können Sie verwenden, um die WorksheetFunction.EoMonth-Funktion und die DateSerial, und ersetzen Sie Ihren Now mit Date, da man mit den Stunden zu verwirren nicht brauchen.

Versuchen Sie, die Linie unten anstatt den gesamten Code:

ActiveSheet.Range("A1:N709").AutoFilter 13, ">=" & DateSerial(Year(Date), -1, 1), _ 
           xlAnd, "<=" & WorksheetFunction.EoMonth(Date, 0), _ 
           Operator:=xlFilterDynamic 
+0

Ich habe das versucht, aber es war immer noch nicht 7/31. @davidmneedham Lösung hat für mich funktioniert. Vielen Dank. – Emartin1863

+0

@ Emartin1863 es ist, weil Ihre Zellen Zeitwerte haben, wenn Sie sie nur als Datum formatieren, wie "ddmmyyyy", wird es für Sie arbeiten. –

+0

WorksheetFunction.EoMonth (Datum, 0) wird weiterhin bis zum 31. Juli 2017 um 12:00 Uhr ausgewertet. Ihre Lösung würde funktionieren, wenn alle Abschlussdatumswerte von Emartin1863 keine Zeit enthielten. – davidmneedham

Verwandte Themen