使用VBA重置过滤器

时间:2018-06-14 14:25:54

标签: excel vba excel-vba commandbutton

我有一小段代码可以重置应用于工作表上列的过滤器。

Sub ResetFilters()

If ActiveSheet.FilterMode Then
Cells.AutoFilter
End If

End Sub

当我单击命令按钮运行宏时,它可以工作,但重置过滤器'命令按钮消失,我在工作表上的其余部分都堆叠在工作表的左上角。他们都不会随着细胞的移动或大小移动。设置为他们的财产,但他们仍然移动......

命令按钮 - 重置过滤器之前

Command Buttons - Before resetting filters

命令按钮 - 重置后

Command Buttons - After resetting

当我进入设计模式时,重置过滤器'按钮重新出现在正确的位置......我很困惑 - 有没有人有任何可以提供的建议?

编辑(14/06 16:41) - 我发现如果我按升序或降序对数据进行排序,那么当我重置过滤器时,按钮会保持原样。如果我过滤掉了一些数据,它们就会移动。

编辑(14/06 17:58) - 我已经包含了我正在使用的截图,以便我的过滤需求更加清晰!我在一所学校工作,老师会用这个工具分析他们的数据。他们可以过滤任何列,根据特征或评估结果分析特定儿童的结果和进度。由于它们可以对许多列进行过滤或排序,因此很难在不丢失列的情况下重置数据。我想添加一个'重置'按钮使这项工作更容易。 (我现在可能会将这些添加到功能区,因为我刚刚为此工具创建了一个定制的学校选项卡,这样就可以解除移动按钮的问题。但是,如果有更好的重置滤镜的方法,我很乐意学习它。)

Screenshot of the data analysis tool

非常感谢。

1 个答案:

答案 0 :(得分:0)

  1. 不要使用ActiveSheet。它容易出现多重错误 请改用Dim ws As Worksheet: Set ws = Sheets("Sheet1")(将Sheet1更改为您正在使用的实际工作表名称)

  2. 如果您愿意删除字面上的所有过滤器(而且不仅仅是在特定范围内),这样做

  3.  
    Private Sub clearfilters()
        Dim ws As Worksheet: Set ws = Sheets("Sheet1")
        ws.Cells.AutoFilter
     End Sub