【问题标题】:VBA Code for Filtering up through the current month用于过滤当月的 VBA 代码
【发布时间】:2017-07-07 18:15:41
【问题描述】:

我有一张工单,其中有一列按日期完成。我正在尝试对其进行过滤以显示过去日期到本月底的所有订单(例如:所有过去的订单 - 2017 年 7 月结束)。

我正在使用的当前代码有效,但由于某种原因不会返回 2017 年 7 月 31 日。它将返回 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

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    dtFinal 是 2017 年 7 月 31 日凌晨 12:00。您需要将最终日期定为 8 月 1 日,然后将过滤器从 "&lt;=" 更改为 "&lt;"

    【讨论】:

    • 这成功了!我拥有的数据来自 Dynamics AX 集,所以它列出了上午 7 点的时间,而不是 12 点(我真的不需要担心时间,只需担心日期)。我只需要纠正它。谢谢!
    【解决方案2】:

    您可以使用WorksheetFunction.EoMonth 函数和DateSerial,并将您的Now 替换为Date,因为您不需要搞砸时间。

    试试下面的代码,而不是你的整个代码:

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

    【讨论】:

    • 我试过这个,但它仍然没有列出 7/31。 @davidmneedham 解决方案对我有用。谢谢。
    • @Emartin1863 这是因为你的单元格有时间值,如果你只将它们格式化为日期,比如“ddmmyyyy”,它会为你工作。
    • WorksheetFunction.EoMonth(Date, 0) 仍计算为 2017 年 7 月 31 日凌晨 12:00。如果 Emartin1863 的所有完成日期值都不包含时间,则您的解决方案将有效。
    • @davidmneedham 你测试了吗?因为我使用这种方法已经有一段时间了,并且有日期(没有时间)对我有用
    • @ShaiRado。是的,我们是一致的。我是说该方法不起作用,因为 M 列中的值不是整数,它们是带时间的日期。 Excel 将 42947.29(时间值为 2017 年 7 月 31 日早上 7 点的日期)与 42947.00 进行比较。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多