Excel应用程序事件:如何在运行时错误后自动重置WithEvents变量?

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每当它被取消时的实例?

RAJ*_*VAR 3

您可以创建一个包含所有全局变量的默认值的公共函数,然后在错误句柄下调用该函数。一个例子:

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)