2017-07-07 55 views
0

我有一張工作訂單,其中有一列完整的日期。我試圖將其過濾爲顯示所有訂單,其中過去的日期會持續到當月末(EX:所有過去的訂單 - 2017年7月底)。用於過濾當月月份的VBA代碼

我正在使用的當前代碼的作品,但由於某種原因不會返回7/31/2017。它將返回所有在前日期至2017年7月30日。有人可以請幫助。

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 

回答

0

dtFinal是2017年7月31日上午12:00。您需要在8月1日做出最終日期,然後將您的過濾器從"<="更改爲"<"

+0

這個工作!我收到的數據來自Dynamics AX設置,因此它將上午7點列出,而不是上午12點(我不必擔心時間,只是日期)。我只需要糾正這一點。謝謝! – Emartin1863

0

您可以使用WorksheetFunction.EoMonth函數和DateSerial,並將Now替換爲Date,因爲您不需要混淆小時。

嘗試線下,而不是整個代碼:

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

我試過了,但它仍然沒有列出7/31。 @davidmneedham解決方案爲我工作。謝謝。 – Emartin1863

+0

@ Emartin1863這是因爲你的單元格有時間值,如果你只將它們格式化爲日期,如「ddmmyyyy」,它將適用於你。 –

+0

WorksheetFunction.EoMonth(Date,0)仍然評估到2017年7月31日中午12:00。如果Emartin1863的所有完成日期值都不包含時間,那麼您的解決方案就可以工作。 – davidmneedham

相關問題