让宏在保存时运行

时间:2017-05-05 15:36:37

标签: excel vba excel-vba

我想在保存工作簿时重置所有过滤器。目前我有:

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 - 它有助于显着提升

1 个答案:

答案 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上的一些人就不会费心去帮忙。