【发布时间】:2020-11-12 14:03:07
【问题描述】:
这是我的任务的简化模型:
我想过滤此表以仅显示 7 月 22 日之后的条目。如果我手动应用过滤器并在菜单/对话框中使用以下值,我可以获得预期的结果:
- “日期过滤器”
- “之后……”
- “之后”和“22/7/2020”
但是当我使用这段代码时(从关闭自动过滤器开始)...
Dim xx As Date
xx = Cells(4, 1)
ActiveSheet.Range("$A:$B").AutoFilter Field:=1, Criteria1:=">" & xx, Operator:=xlAnd
... excel 过滤掉所有行。
尝试调试时,如果我单击 A 列中的自动筛选下拉按钮,看起来 Excel 填充的选项与我手动完成的完全相同...如果我单击对话框并单击确定(没有改变任何东西),过滤器的行为符合预期。
有什么方法可以让 VBA 正确应用自动过滤器?
在实际应用中,我只需要简单的功能(在截止日期之前/之后应用不同的颜色)。在最坏的情况下,我可以在工作表中添加一个临时布尔列并对其进行过滤......但如果有人能提出一种不那么笨拙的方法,我将不胜感激。
ActiveSheet.Range("$A:$c").AutoFilter Field:=3, Criteria1:="True", Operator:=xlAnd
如果相关,我在英国,地区默认日期格式 = DD/MM/YY。
【问题讨论】:
-
在手动应用过滤器时录制宏,并将其与现有代码进行比较。
-
感谢蒂姆的快速回复。记录 + 然后运行宏给出相同的结果:所有行都被隐藏。然后(在运行 VBA 之后)我转到电子表格并单击 A1 中的 Autofilter 下拉按钮,然后将鼠标悬停在“日期过滤器”上(注意它旁边已经有一个勾号),然后出现一个子菜单带有一个勾号已经在“之后”旁边。我单击那里,然后单击确定以确认已经存在的内容('is after' 和 '22/07/2020')......所以我什么也没做任何更改,并且过滤器有效。
-
当然有你想要的结果——问题是记录的代码与你发布的代码相比如何?
-
嗨蒂姆,对不起,我过度解释了您的问题,感谢您的跟进。这是记录的代码:
Sub Macro3()Columns("A:B").SelectSelection.AutoFilterActiveSheet.Range("$A$1:$B$6").AutoFilter Field:=1, Criteria1:= ">22/07/2020", Operator:=xlAndEnd Sub因为它给出的结果与我最初发布的代码相同,所以我认为发布代码没有用(足以说明行为是一样的)。但是,通过提示我再次使用代码,您的问题帮助我找到了自己的解决方案,我将在下面发布!
标签: excel vba date autofilter