我想在保存工作簿时重置所有过滤器。目前我有:
Sub ResetFilters()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
Call ResetFilters
Next
Cancel = False
End Sub
我的想法是,当我保存时,我删除所有过滤器。它出于某种原因无法工作 - 有没有人知道为什么?
编辑:更多谷歌搜索找到答案:Excel VBA - Run macro before save
Tl; dr:总是google中包含关键字stackoverflow - 它有助于显着提升
答案 0 :(得分:1)
您的程序可以更好地编写。我知道你解决了原来的问题,但你确实注意到你不介意重置过滤器的更好方法。这是更好的方法:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim ws As Worksheet
' Use 'ThisWorkbook' here since you only want to modify the workbook
' that the code is running in
For Each ws In ThisWorkbook.Worksheets
If ws.AutoFilterMode then ws.ShowAllData
Next
Cancel = False
End Sub
学习VBA的提示,只是因为你可以绕过On Error Resume Next
的错误并不意味着你应该这样做。通常,通过简单的布尔检查可以避免错误。这可以防止您错过其他潜在问题,并且是更好的编码实践。更进一步,如果你只是完全忽略错误,SO上的一些人就不会费心去帮忙。