首先,我很高兴能加入这个很好的社区,这是我的第一篇帖子,所以提前为我在文章中可能出现的任何错误表示歉意。
我有一个名为example的表格,通过从Access文件导入数据生成,因此行数会动态变化...我正试图通过VBA将AdvancedFilter
方法应用于该表格。
我使用工作表的第一行来复制表头,并在第二行设置过滤器的参数,因此在A1:D2范围内我得到了条件。从第5行开始,我有表格example:它从标题行开始,并继续包括所有的数据行,全部从Access文件导入,例如范围A5:D20。
如果我手动应用高级筛选(单击高级筛选按钮并填写表单),指定表格A5:D30和条件范围A1:D2,它可以正常工作...但是,如果我使用表格名example而不是指定数据范围,结果就会不同,只有一行而不是我期望的五行(正确)...为什么?!
现在,如果上面的问题只是出于好奇(但我确信它与我的问题有关),那么主要问题是我正在尝试通过VBA代码做同样的事情。 我尝试过
Worksheets("name").Range("example[#All]").AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2"), Unique:=False
并且
Worksheets("name").ListObjects("example").Range.AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2")
但两者都没有起作用:过滤操作未返回任何行。即使我尝试。
Worksheets("name").Range("A5:D30").AdvancedFilter _
Action:=xlFilterInPlace, CriteriaRange:=Range("A1:D2"), Unique:=False
手动指定范围(不是我的问题的解决方案,因为范围会动态变化,但是出于测试目的...)问题仍然存在,代码没有返回任何行。
注意:如果我在上面的代码中选择 range
而不是AdvancedFilter
,则选择是正确的:整个带有标题的表格
第一个代码是自动编写的,如果我开始录制宏,手动进行过滤,然后停止录制宏(使用表格引用完全编写的代码)...奇怪的是,当我手动执行操作时(同时记录宏),它可以正确地进行筛选,但是如果我启动刚刚记录的宏...什么也没有,与运行上面编写的代码相同.
如果我打开公式->名称选项卡,我可以找到example表格,但是指定的范围不是从第5行开始而是从第6行开始...似乎没有考虑标题,不知道为什么...但是它是通过导入数据自动生成的,所以我不知道如何更改范围并保持对导入数据的引用...也许这就是问题所在?!?
不知道如何解决这个问题,请帮帮我 :)
编辑:
我正在使用的过滤条件中有两个日期条件,具体来说是:date <= xx/yy/zzzz和date >= aa/bb/cccc问题就在这里...如果我尝试用上面三种代码使用字符串条件进行筛选,它们可以工作,但如果我使用日期条件,则不行。所以我猜问题取决于VBA如何处理日期数据类型。有什么建议吗?
用于条件的单元格包含此公式("SE"是“IF”的意大利版本):
=SE(filtro!F2="";"";">="&filtro!F2)
=SE(filtro!F3="";"";"<="&filtro!F3)
我从另一个工作表 ("filtro") 获取条件,如果单元格已填充,则使用 <= 或 >= 报告插入的数据以满足该条件,否则,该单元格保持为空以不设置任何条件。
谢谢,Ettore。
filtro!F2
包含实际日期,则它仍应该起作用。正如我所写的那样,试图在无法重现您的问题的情况下进行故障排除非常繁琐且没有回报。您不能设计一个能够重现问题的工作簿吗? - Ron Rosenfeld