osc*_*tin 5 excel events vba excel-vba
我使用PERSONAL.XLSB来执行全局宏.在其中,我还通过在ThisWorkbook
对象中执行此操作来侦听应用程序事件:
Dim WithEvents app As Application
Private Sub Workbook_Open()
Set app = Application
End Sub
Run Code Online (Sandbox Code Playgroud)
现在,我可以收听所有工作簿事件,而无需将事件连接到每个工作簿.
问题是,每当一个宏抛出异常并导致我必须结束宏时,所有全局变量都会被破坏,因此app
变量设置为Nothing
导致所有全局事件不再触发.
有没有什么方法可以让这个变量自动重新设置为Application
每当它被取消时的实例?
您可以创建一个包含所有全局变量的默认值的公共函数,然后在错误句柄下调用该函数。一个例子:
Dim WithEvents app As Application
Private Sub Workbook_Open()
On Error GoTo reset
Set app = Application
On Error Goto 0 ' Turn off error trapping.
Exit Sub
Reset:
Call resetvar
End Sub
Public Sub Resetvar()
Set app = Application
End Sub
Run Code Online (Sandbox Code Playgroud)