我将所有宏存储在personal.xlsm中,直到现在我使用标准过滤器来隐藏/显示列。我现在要实现的新功能是每个用户都可以拥有自己的过滤器。因此,基本上我会在个人过滤器的文件夹中查找它是否存在,如果它存在,则使用该过滤器而不是标准过滤器。
但我的问题是我想在workbookOpen
事件上加载个人过滤器并重置为beforeClose
事件的标准过滤器。我的问题是,我是否可以从personal.xlsm中做到这一点?或者我是否必须手动浏览所有250个工作簿并添加此工作簿模块onOpen
和beforeClose
事件以调用我的方法createFilter和resetFilter?
以下是personal.xlsm对于那些不熟悉该方法的人的链接
答案 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