Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 尝试获取日期筛选的自动筛选条件时出现错误1004_Vba_Excel - Fatal编程技术网

Vba 尝试获取日期筛选的自动筛选条件时出现错误1004

Vba 尝试获取日期筛选的自动筛选条件时出现错误1004,vba,excel,Vba,Excel,我正在编写一段VBA代码,它应该在Excel中保存和恢复当前的自动筛选状态。我已经用了很长时间没有任何问题,但现在我遇到了一个相当严重的问题。让我来说明一下 假设您有一个(非常简单的)带有日期筛选的表设置: 如果希望以编程方式使用筛选条件,则将失败: 这在Excel 2010中发生在我身上。有人知道这方面的解决方法吗 Microsoft TechNet上其他人描述的同一问题的链接:这指向解决方案,但该网站提到: 未知(可能是日期树视图筛选器)到目前为止,我无法找到捕获日期筛选器的方法,其中条

我正在编写一段VBA代码,它应该在Excel中保存和恢复当前的自动筛选状态。我已经用了很长时间没有任何问题,但现在我遇到了一个相当严重的问题。让我来说明一下

假设您有一个(非常简单的)带有日期筛选的表设置:

如果希望以编程方式使用筛选条件,则将失败:

这在Excel 2010中发生在我身上。有人知道这方面的解决方法吗

Microsoft TechNet上其他人描述的同一问题的链接:这指向解决方案,但该网站提到:

未知(可能是日期树视图筛选器)到目前为止,我无法找到捕获日期筛选器的方法,其中条件基于筛选器下拉列表中树状视图控件的选择。这些标准不存储在Criteria1或Criteria2属性中。我想,制定标准将涉及到循环Range_字段值。尽管这首先需要关闭所有其他字段过滤器,但工作表函数无法执行某些操作,并且需要一个计时器来触发子程序。同样,我选择了避免额外的复杂性


这似乎是一个bug,但它仅在使用过滤器选择器底部的树视图时发生


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

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

存储自动筛选状态(包括日期筛选的treeview选择)的另一种方法是使用自定义视图

'[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]

但是,有三个条件可以让它发挥作用:

  • 工作簿中的任何工作表都不应受到保护
  • 在显示自定义视图之前,不应清除/删除应用自动筛选的字段
  • 工作簿中的任何工作表上都不能有任何列表对象(即“格式化为表”的范围)。如果您至少有一个ListObject,则CustomViews功能将被完全禁用,对其进行的任何VBA调用都将导致运行时错误1004。在保存自定义视图之前,必须先取消列出所有ListObject

  • 额外好处:窗口中的列宽、冻结窗格位置和范围位置也存储在自定义视图中。

    @Gary's学生您可以在第二个屏幕截图上看到这一行时完全重现该问题-这本身将抛出下面的错误,但是不应该。链接的域不再存在。注意:还有另一个条件:工作簿中的任何工作表上都不能有任何
    列表对象
    (即范围“格式化为表”)。如果您至少有一个
    ListObject
    ,则CustomView功能将被完全禁用,任何VBA调用都将导致运行时错误1004。在保存自定义视图之前,您必须
    .Unlist
    所有ListObject。(顺便说一句:我不知道,为什么我的申请被拒绝了——但是,谁知道人们在想什么……)我把你的补充加入了我的回答中,马库斯。谢谢。
    '[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]