过滤日期小于VBA中currentDate的日期

时间:2015-11-19 03:44:18

标签: vba filter

我正在尝试过滤日期小于今天的列中的日期。我已经编写了代码,但它似乎没有用。

Sub FilterByDate()

Dim ws1 As Worksheet
Set ws1 = ActiveWorkbook.Worksheets("Sheet1")
Set rng1 = ws1.Range(ws1.[c2], ws1.Cells(Rows.count, "C").End(xlUp))
Dim todayDate As Date
todayDate = Format(Date, "dd/mm/yyyy")
rng1.AutoFilter Field:=1, Criteria1:="<" & todayDate
rng1.Offset(1, 0).EntireRow.Delete
ws1.AutoFilterMode = False

End Sub

此代码不会过滤日期小于今天的日期。当我过滤时,列表似乎没有变化。需要一些帮助。

编辑:

15/03/2016
15/12/2015
17/11/2015
14/01/2016
18/02/2016
14/04/2016
15/12/2015
17/11/2015
14/01/2016
17/11/2015

enter image description here

1 个答案:

答案 0 :(得分:1)

AutoFilter声明的最后,请执行:

Operator:=xlAnd

这条线应该成为:

rng1.AutoFilter Field:=1, Criteria1:="<" & todayDate, Operator:=xlAnd

对于需要此运算符的日期过滤器,必须有所不同。我不会声称提前知道这个,我用宏录音机搞清楚了:)

enter image description here

评论中的其他信息:

您的问题可能与系统区域设置和VBA&#34;功能&#34;有关。在内部使用美国英语日期。

  • 首先:您提供的日期为有效的美国 - 英语日期,并且不会这样解决(日期的一个特别有趣的问题是2015年6月6日解决为6月3日对于世界其他地方,虽然它是3月6日的美国英语。像17/11/2015这样的价值观根本不是日期。
  • 另外:在这个声明中可能会有一些糟糕的juju:

    todayDate = Format(Date, "dd/mm/yyyy")

    在这里,您将获取 date (长整数,由Date()函数生成)并通过Format()将其转换为字符串,返回一个字符串,然后您&# 39;将该字符串放入todayDate变量中。即使您已使用区域设置解决了该问题,此声明本身也可能存在问题。