我每周都有不断增长的数据集,并且仅需过滤最近7天的内容(每周更新时间为上周上午11:00)。我想通过VBA自动化整个过程,但是正在努力使日期时间自动筛选器正常工作。日期时间列如下所示(dd-mm-yyyy时间):
我在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
如果我让代码在工作表上运行,它将应用过滤器,但除第一行外,整个工作表都为空白,如下所示:
当我现在在EXCEL中手动输入自动过滤器功能以检查应用了哪种过滤器时,它会完全按照我的意愿显示该过滤器,并在按下“确定”后将实际应用并显示正确的值:
因此,代码确实插入了正确的过滤器,但是将所有单元格留空,直到我在过滤器功能中手动按下“确定”为止。 如何解决此问题,以便代码正确应用自动过滤器并自动显示值?
我发现此问题似乎与EXCEL国家/地区版本有关。我在德国的excel上,设置为英语。但是我不知道这意味着什么以及如何解决该问题。
预先感谢您的帮助。
答案 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