Excel VBA日期时间筛选器隐藏除顶行

时间:2019-07-12 13:36:27

标签: excel datetime filter excel-formula excel-2010

我每周都有不断增长的数据集,并且仅需过滤最近7天的内容(每周更新时间为上周上午11:00)。我想通过VBA自动化整个过程,但是正在努力使日期时间自动筛选器正常工作。日期时间列如下所示(dd-mm-yyyy时间):

date-time column

我在VBA中使用以下代码设置了自动过滤器:

Dim d1, d2, m1, m2, y1, y2 As Integer
Dim dt1, dt2 As String
d1 = Day(Date - 7)
d2 = Day(Date)
m1 = Month(Date)
y1 = Year(Date)
dt1 = d1 & "." & m1 & "." & y1
dt2 = d2 & "." & m1 & "." & y1

ActiveSheet.Range("$A$1:$CZ$99999").AutoFilter Field:=57, Criteria1:= _
    ">=" & dt1 & " 11:00", Operator:=xlAnd, Criteria2:="<=" & dt2

如果我让代码在工作表上运行,它将应用过滤器,但除第一行外,整个工作表都为空白,如下所示:

weird blank result

当我现在在EXCEL中手动输入自动过滤器功能以检查应用了哪种过滤器时,它会完全按照我的意愿显示该过滤器,并在按下“确定”后将实际应用并显示正确的值:

filter is correct

因此,代码确实插入了正确的过滤器,但是将所有单元格留空,直到我在过滤器功能中手动按下“确定”为止。 如何解决此问题,以便代码正确应用自动过滤器并自动显示值?

我发现此问题似乎与EXCEL国家/地区版本有关。我在德国的excel上,设置为英语。但是我不知道这意味着什么以及如何解决该问题。

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

dt1 = d1 & "." & m1 & "." & y1
dt2 = d2 & "." & m1 & "." & y1

这些不是Date。您无法将它们与Date进行比较。

ActiveSheet.Range("$A$1:$CZ$99999").AutoFilter Field:=57, Criteria1:= _
    ">=" & dt1 & " 11:00", Operator:=xlAnd, Criteria2:="<=" & dt2

这是现在尝试过滤的Date值,它们等于String"5.7.2019 11:00" ,并且等于String值{{ 1}}。由于"12.7.2019"不等于"5.7.2019 11:00",因此永远不会是"12.7.2019"。由于True的值不是Date的值,因此String

会更少

手动打开“过滤器”菜单时,它包含文本True"12.7.2019"。当您单击“确定”时,它将解析这些内容,识别出它们被假定为为日期,并将其转换为"5.7.2019 11:00" s。这样就可以了。

您需要做的是先将Date转换为String,然后再使用它们。我们还需要解决Microsoft Office以美国为中心的习惯,即认为“ 12.7.2019”意味着“ 2019年12月7日”而不是“ 2019年7月12日”: / p>

Dates