Excel VBA 加载项 - 如何确保始终捕获事件;以及在错误、重置、保存等之后?



我目前正在为我的工作场所开发一个带有各种 UDF 和 sub 的加载项,以简化日常工作。作为其中的一部分,我需要在任何打开的工作簿中捕获这些函数的更改。目的是检查潜在的错误。

我目前在一个类(称为clsApp(的帮助下完成了它,如下所示:

Option Explicit
' Class module
Public WithEvents app As Application
Private Sub App_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
'' Code to check for uncorrected errors which is the working case
End Sub

以及一个用于实例化类的宏:

Public myApp As clsApp
Public Sub Init()
'Reset in case it's already loaded
Set myApp = Nothing
Set myApp = New clsApp
Set myApp.app = Application
End Sub

thisWorkbook中,我在打开时称init()子:

Private Sub Workbook_Open()
Init
End Sub

然而,myApp对象变量的值有时会丢失,或者事件只是停止发送到类 - 例如,如果发生错误或单击"重置"/结束按钮。因此,在丢失后,事件永远不会被触发,因此检查错误的潜艇永远不会被触发。

有没有办法防止这种情况并确保保存类对象的变量永远不会丢失?

您可以使用加载项中的Workbook_SheetCalculate事件来检查您的 myApp 是否什么都没有,如果没有再次设置它。 您需要在插件中的工作表上放置一个易失函数,例如 =Now((

所以: 您的模块:

Public myApp As ClsApp
Public Sub Init()
If myApp Is Nothing Then
Set myApp = New ClsApp
Set myApp.app = Application
End If
End Sub

您的插件的本工作手册:

Private Sub Workbook_Open()
Init
End Sub
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
Init
End Sub

它仍然是一种解决方法,需要某种计算才能再次重置。

最新更新