2017-07-07 46 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