【问题标题】:Clear filter from Table从表中清除过滤器
【发布时间】:2022-04-15 07:18:18
【问题描述】:

我正在尝试运行一个宏来替换 Excel 中表格中的数据,而最初可能会过滤数据。

代码应先删除过滤器,然后运行其余代码。

我尝试了“自动筛选”命令,但表格范围内的正常筛选选项不可见,我不得不再次手动创建筛选选项(对我来说没什么大不了,但其他人使用此文件)。

有没有办法在不从表格中删除过滤器的情况下清除过滤器?

【问题讨论】:

标签: vba excel


【解决方案1】:

对于一个表,您可以简单地使用其Autofilter 对象的ShowAllData 方法:

activesheet.listobjects(1).autofilter.showalldata

请注意,即使当前没有应用过滤器,这也不会出错。

【讨论】:

  • 当取消过滤表时,请执行以下操作activesheet.listobjects("Table Name").AutoFilter.ShowAllData 这解决了我遇到的问题
【解决方案2】:

大家好,请使用此“Worksheets("Sheet1").ListObjects(1).Range.AutoFilter = False”,请注意,如果已应用过滤器,它将删除过滤器,另一方面,如果在应用之前未应用过滤器,则会删除过滤器过滤器。

【讨论】:

    【解决方案3】:

    我发现“...ClearAllData”方法失败了。

    偷偷摸摸 - 不是非常优雅的解决方案 - 按字段工作(如果您需要处理整个表格,这很麻烦),但如果您只有一个字段(例如我的示例中的字段 2)很容易使用通配符:

    ActiveSheet.ListObjects(1).Range.AutoFilter Field:=2, Criteria1:="=*"
    

    【讨论】:

    • 抱歉 - 更好:不需要“标准...”。
    【解决方案4】:

    这扩展了@Rory 的答案(我每次记不起语法时都会查找的答案)。它避免了当表不包含自动过滤器时发生的错误。

    If Not .AutoFilter Is Nothing 部分检查 ListObject(表)的 AutoFilter 对象属性。如果是Is Nothing,那么该表的自动过滤器已被删除。

    With Activesheet.Listobjects(1)
        If not .AutoFilter Is Nothing Then .AutoFilter.ShowAllData
    End With
    

    【讨论】:

      【解决方案5】:
      ActiveSheet.ShowAllData
      

      或者

      Cells.AutoFilter
      

      【讨论】:

      • 我本可以添加一些错误处理检查,但是您上面的链接没有提到这些方法吗?
      • 您提供的代码在过滤表中不起作用,它们在过滤表中起作用,但这不是问题。
      • 抱歉,Cells 1 出错,但 ShowAllData 1 有效
      • 问题是好像清除了表头的默认过滤选项,对于共享表来说是个问题。
      猜你喜欢
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      相关资源
      最近更新 更多