尝试获取日期过滤的AutoFilter条件时出现错误1004

时间:2014-03-10 17:25:48

标签: excel vba excel-vba

我正在制作一块VBA代码,应该可以节省和使用在Excel中恢复当前的AutoFilter状态。我一直在使用the code here一段时间没有任何问题,但现在我遇到了一个非常严重的问题。让我说明一下......

假设你有一个(非常简单的)表设置日期过滤: enter image description here

如果您希望以编程方式使用过滤条件,则会失败: enter image description here

在Excel 2010中发生了这种情况。有人知道解决方法吗?

Microsoft TechNet上其他人描述的同一问题的链接:Excel VBA AutoFilter criteria when Operator is xlFilterValues for Dates这指向Jon von der Heyden's site的解决方案,但网站提到:

  

未知(可能是日期TreeView过滤器):到目前为止,我无法找到一种方法来捕获日期过滤器,其中条件基于Filter过滤器下拉菜单控件中的选择。这些条件不存储在Criteria1或Criteria2属性中。我想,制定标准将涉及循环Range_Field值。虽然这首先要求关闭所有其他字段过滤器,但是工作表函数无法执行某些操作,并且会涉及触发子例程的计时器。我再次选择避免额外的复杂性。

3 个答案:

答案 0 :(得分:3)

存储自动过滤器状态的另一种方法(包括日期过滤器的树视图选择)是使用自定义视图。

'[whatever code you want to run before capturing autofilter settings]

    wkbExample.CustomViews.Add ViewName:="cvwAutoFilterSettings", RowColSettings:=True

    '[whatever code you want to run with either your autofilter or no autofilter]

    wkbExample.CustomViews("cvwAutoFilterSettings").Show
    wkbExample.CustomViews("cvwAutoFilterSettings").Delete

    '[whatever code you want to run after restoring original autofilter settings]

Original post by Cyious

然而,有三个条件可以使它发挥作用:

  1. 工作簿中的任何工作表都不应受到保护
  2. 在显示自定义视图
  3. 之前,不应清除/删除应用自动过滤器的字段
  4. 您不能在工作簿中的任何工作表上拥有任何ListObjects(即范围"格式化为表")。如果您至少有一个ListObject,则完全禁用CustomViews功能,并且对它的任何VBA调用都将导致运行时错误1004.在保存自定义视图之前,您必须.UnList所有ListObjects。
  5. 奖励:窗口中的列宽,冻结窗格位置和范围位置也存储在自定义视图中。

答案 1 :(得分:2)

似乎是一个错误,但只有在使用过滤器选择器底部的树视图时才会出现。

如果您使用“datefilters”选项并选择过滤器,那么它将正常工作。

答案 2 :(得分:0)

对于那些寻找提取在树视图中选择的日期自动过滤器的方法的人,我有一个工作解决方案,使用XML数据,发布在这里:
Get Date Autofilter in Excel VBA