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

首先,所有我很高兴享受这个不错的社区,这是我的第一篇文章,所以提前道歉我任何错误,我会在后。

我有一个名为示例的表,通过从访问文件导入数据生成,所以行数dynamic变化…我想通过VBA将AdvancedFilter方法应用于此表。
我用表的第一行复制表头,在第二行我设置我的参数进行过滤,所以在范围A1:D2我得到的标准。 从第5行开始,我有表格示例 :它从一个标题行开始,并继续使用从访问文件导入的所有数据行,例如范围A5:D20
如果我手动应用高级filter(点击高级filterbutton并填写表格),指定表A5的范围:D30和范围的标准A1:D2它工作正常…但如果不是指定范围的数据我使用表名的例子结果是不同的,只是一行而不是我想要的五(右)行…为什么?!?
现在,如果上面的问题只是为了好奇(但我确定它与我的问题有关),主要的问题是我试图通过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 

手动指定范围(不是我的问题的解决scheme,因为范围dynamic变化,但出于testing目的…)问题依然存在,代码没有返回任何行。

注意:如果我在上面的代码中select range而不是AdvancedFilter ,那么select是正确的:带有标题的整个表格

第一个代码是相同的自动写入,如果我开始录制一个macros,手动进行过滤,并停止录制macros(代码完全与表引用)…奇怪的是,当我手动做的操作(while录制macros)它过滤正确,但如果我开始刚录制的macros…没有什么,就像我运行上面写的代码一样。

如果我打开公式 – >名称选项卡,我可以find示例表,但指定的范围不是从第5行开始,但从6 …这就像头不考虑,不知道为什么…但它会自动生成与input的数据,所以我不知道如何改变范围保持参考导入的数据…也许是这个问题?

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

编辑:
我使用filter的两个标准是date标准,特别是: date<= xx / yy / zzzzdate> = aa / bb / cccc和问题就是这个…如果我尝试上面的三个代码过滤与string标准,他们工作,如果我使用他们的date标准,他们不。 所以我想这个问题取决于VBA如何处理date数据types。 任何build议?

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

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

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

谢谢

埃托雷

尝试以下步骤。 它正在为我工​​作。

首先我们应该创build一个命名范围(Define Name)(称为Table),使用公式= OFFSET(Sheet1!A5,0,0,COUNTIF(Sheet1!$ A $ 5:$ A $ 100,“ <>“),4)。

粘贴此偏移公式,同时创build名称范围 – 表。

这个公式将dynamic地改变范围。

写如下的VBA代码

Sub Advanfil()“Advanfilt Macro”

'Range(“Table”)。AdvancedFilter Action:= xlFilterInPlace,CriteriaRange:= _ Range(“A1:D2”),Unique:= False End Sub

我认为上述应该可以缓解我们的困难。

好的,最后我解决了这个问题,并分享解决scheme。
正如我在我的问题的编辑中提到的,filter的两个标准是date,我发现两个问题,都与这个连接:

  • 当我从其他来源(访问文件)导入数据,并填充表格,我要过滤我没有设置适当的格式的字段,我留下了所有的Excel决定,这是一个问题。 正确的方法是设置:
    1. 表格中的字段(包含要过滤数据的字段)与date格式一样(对我来说不是那么简单,因为它们被作为文本存储在访问中,所以我必须创build一个SQLstring来提取正确types的数据,格式)。
    2. 在filter的条件作为general (在我的情况下,该字段包含公式中提到int我的问题的编辑)的字段。
    3. 在该字段中,我使用与表格(第1点)的字段相同的格式插入date(在公式中引用的date )作为date
  • 在我的问题编辑中提到的公式看起来在一个单元格(我插入date),如果这个单元格填充,返回类似于<=数据插入> =数据插入 (这是确定的),但是当在单元格中没有插入返回"" 。 对于filter中的string标准,这是可以的,但对于date标准不是,这会导致filter在填充date的表格字段中找不到与""的内容。 我尝试使用null值或其他类似的值,但我找不到什么是date标准…所以我使用的解决方法是返回<= 31/12/2100> = 01/01/1900时我不想限制磨碎机或更低的date。

希望这可以帮助别人。
埃托雷