具有日期条件的表的 vba excel AdvancedFilter 方法不起作用

标签 vba excel macros

首先,我很高兴能享受这个美好的社区,这是我的第一篇文章,如果我在文章中犯了任何错误,请提前向我道歉。

我得到了一个名为 example 的表,该表是通过从访问文件导入数据生成的,因此行数会动态变化...我正在尝试应用 AdvancedFilter通过 VBA 对此表的方法。
我使用工作表的第一行复制表格的标题,在第二行中我设置了过滤参数,所以在 A1:D2 范围内我得到了标准。从第 5 行开始,我有表格 example:它以标题行开始,然后是所有数据行,全部从访问文件导入,例如范围 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,那么选择是正确的:整个表带有标题

如果我开始录制宏,手动执行过滤,然后停止录制宏,那么第一个代码是自动编写的(代码完全按照表格引用编写)...奇怪的是,当我手动执行操作(在录制宏时)它会正确过滤,但是如果我启动刚刚录制的宏...什么都没有,就像我运行上面编写的代码一样。

如果我打开 formula->names 选项卡,我可以找到 example 表,但指定的范围不是从第 5 行开始,而是从第 6 行开始...就像不考虑 header ,不知道为什么......但它是随着数据的导入自动生成的,所以我不知道如何更改范围以保持对导入数据的引用......也许是这个问题?!?

不知道如何解决这个问题,请帮助我:)

编辑:
我用于过滤器的两个标准是日期标准,具体来说:date <= xx/yy/zzzzdate >= aa/bb/cccc 以及问题正是这样...如果我尝试使用字符串条件过滤上面的三个代码,它们会起作用,如果我将它们与日期条件一起使用,它们就不会起作用。所以我想问题取决于 VBA 如何处理日期数据类型。有什么建议吗?

用于条件的单元格包含此公式(“SE”是“IF”的意大利语版本):

=SE(filtro!F2="";"";">="&filtro!F2)
=SE(filtro!F3="";"";"<="&filtro!F3)

我从另一张工作表(“filtro”)中获取标准,如果单元格已填充,我报告插入的数据为标准 <= 或 >=,否则单元格保持为空,因为不设置任何条件。

谢谢

埃托尔

最佳答案

尝试以下步骤。它对我有用。

首先我们应该创建一个命名范围(定义名称)(称之为表),使用公式 =OFFSET(Sheet1!A5,0,0,COUNTIF(Sheet1!$A$5:$A) 将范围设为动态$100,"<>"),4).

在创建名称范围 - 表格时粘贴此偏移公式。

这个公式会动态改变范围。

编写如下VBA代码

子 Advanfil() ' ' Advanfilt宏 '

' Range("Table").AdvancedFilter 操作:=xlFilterInPlace,CriteriaRange:= _ 范围(“A1:D2”),唯一:=假 结束子

我认为以上内容应该可以减轻您的困难。

关于具有日期条件的表的 vba excel AdvancedFilter 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36096464/

相关文章:

sql - 使用VBA更改Access中多个表中列的数据类型

java - Integer.Parse 在 excel 获取的字符串上抛出 NumberFormatException

c++ - 如何使用宏或元编程在 C++ 中创建 'passthru' 函数?

c - 在 gdb 中打印函数宏定义

excel - 如何使用 VBA 引用 Excel 中的表格?

macros - 检测预处理器中的 -xarch 选项?

excel - 创建一个新选项卡,从另一个选项卡复制数据,然后将数据(带格式)粘贴到新选项卡中

vba - 将突出显示的文本更改为不同的颜色

excel - 我已经记录了一个 excel vba 排序但不理解代码行

excel - 在先前创建的多页上调用添加时出现 VB6 自动化错误