我正在构建一个外接程序来处理一个非常烦人的外部提供的文件。打开该文件时,它会做很多令人讨厌的事情,将其中的功能区隐藏起来。我想阻止这种行为。是的,可以通过其他方式实现,但我希望将其集成到插件中-与工作表交互的用户非常老练-打开文件时按Shift的操作太复杂了,我们也希望文件中的其他宏才能正常运行。
所以,问题:
答案 0 :(得分:2)
可能是的。您可以执行以下操作:
在名为AppEvents
的新类模块中,放置以下代码:
Option Explicit
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "Hello new workbook!"
'do whatever else you'd rather do here
End Sub
Private Sub Class_Terminate()
Set App = Nothing
End Sub
如果要检测新的工作簿以及打开已经创建的工作簿,则也需要添加它:
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
MsgBox "Hello new workbook!"
'do whatever else you'd rather do here
End Sub
然后在模块中,我们需要创建一个模块级变量来保存事件处理程序,并创建一个可以设置此模块变量的函数:
Option Explicit
Dim EventHandler As AppEvents
Sub InitHandler()
Set EventHandler = New AppEvents
Set EventHandler.App = Application
End Sub
最后,我们需要向XLAM插件的thisworkbook
部分添加一个函数:
Private Sub Workbook_Open()
Call InitHandler
End Sub
这种工作方式是,当在Excel中打开工作簿时,只要XLAM加载项也被打开,就会调用workbook_open例程。这样会在公共模块中初始化事件处理程序,从而捕获应用程序调用。
拥有该类的唯一原因是我们需要将具有事件的变量放入类模块中。
我使用this short article捕获打开事件来编写它。希望这会有所帮助。