如何在保存并关闭Excel前自动清除所有筛选器?
实现Excel保存前自动清除表格筛选器的方案
直接利用Excel工作簿的BeforeSave内置事件,就能让自带的保存按钮自动触发清除筛选的操作,不用额外做宏按钮,同事完全不用额外操作。
操作步骤:
- 打开你的Excel文件,按
Alt+F11打开VBA编辑器;或者右键任意工作表标签,选择「查看代码」。 - 在左侧的「工程资源管理器」中,找到你的工作簿,双击
ThisWorkbook对象。 - 在右侧的代码窗口中,粘贴以下代码:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim ws As Worksheet Dim tbl As ListObject ' 遍历所有工作表里的所有表格,清除筛选 For Each ws In ThisWorkbook.Worksheets For Each tbl In ws.ListObjects ' 检查表格是否处于筛选状态,是则显示全部数据 If tbl.AutoFilter.FilterMode Then tbl.AutoFilter.ShowAllData End If Next tbl Next ws End Sub
可选优化(针对特定表格):
如果只需要处理你提到的Table1,可以把上面的循环代码替换成下面这段,记得把"你的工作表名"改成实际存放Table1的工作表名称:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim tbl As ListObject ' 定位到指定表格 On Error Resume Next ' 防止表格不存在时报错 Set tbl = ThisWorkbook.Worksheets("你的工作表名").ListObjects("Table1") On Error GoTo 0 ' 清除该表格的筛选 If Not tbl Is Nothing Then If tbl.AutoFilter.FilterMode Then tbl.AutoFilter.ShowAllData End If End If End Sub
注意事项:
- 保存文件时,必须选择启用宏的工作簿(.xlsm格式),否则宏会失效。
- 同事首次打开文件时,Excel会弹出安全提示,让他们点击「启用内容」即可,之后保存操作会自动触发清除筛选的逻辑,完全不用额外操作。
内容的提问来源于stack exchange,提问作者Antonys Baratheon
相关产品推荐
相关产品推荐

