从excel中的personal.xlsm检测事件ActiveWorkbook.Save

时间:2015-11-27 12:17:52

标签: vba excel-vba excel

我将所有宏存储在personal.xlsm中,直到现在我使用标准过滤器来隐藏/显示列。我现在要实现的新功能是每个用户都可以拥有自己的过滤器。因此,基本上我会在个人过滤器的文件夹中查找它是否存在,如果它存在,则使用该过滤器而不是标准过滤器。

但我的问题是我想在workbookOpen事件上加载个人过滤器并重置为beforeClose事件的标准过滤器。我的问题是,我是否可以从personal.xlsm中做到这一点?或者我是否必须手动浏览所有250个工作簿并添加此工作簿模块onOpenbeforeClose事件以调用我的方法createFilter和resetFilter?

以下是personal.xlsm对于那些不熟悉该方法的人的链接

2 个答案:

答案 0 :(得分:1)

在personal.xlsm中,创建一个名为“Helper”的类模块。将以下代码放入其中:

Option Explicit

Public WithEvents xlApp As Application

Private Sub Class_Initialize()

    Set xlApp = Application

End Sub

Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)

    'Your code here

End Sub

您加载过滤器的代码应该放在“您的代码位”中。

添加标准代码模块并添加以下代码:

Public MyHelper As Helper

最后,在personal.xlsm的Workbook_Open事件中,放置此代码:

Private Sub Workbook_Open()

    Set MyHelper = New Helper

End Sub

保存personal.xlsm并重新启动Excel。

答案 1 :(得分:0)

如果有人需要帮助,下面是帮助程序中的代码:

Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
    Dim myPath As String
    On error resume next
    If InStr(UCase(ActiveWorkbook.Name), "PARTSLIST") And (InStr(UCase(ActiveWorkbook.Name), "FILTERPARTSLIST") = 0) Then
        myPath = Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1)
        If Dir(myPath & "\filterPartsList.xlsx") <> "" Then  '
            Call ColumnCreater.updateFilter
        Else
            Call ColumnCreater.filterCreationStandard
        End If
    End If
End Sub