我已经设置了一个应用程序级事件类来监视按照CPearson's guide创建/打开新工作簿的时间。这在隔离工作正常。但是,它是作为加载项的一部分而写的,其中几个其他子组件也在“Workbook_Open”子组件中调用,参见下面的代码:
Private XLApp As baseCXlEvents
Private Sub Workbook_Open()
Set XLApp = New baseCXlEvents
test
AddLocalReferences
AddModules
AddClassModules
Debug.Print "testing"
End Sub
因此XLApp
变量在模块范围内被调用为baseCXlEvents
类。我在此类中添加了Class_Terminate
事件,这是在Debug.print "testing"
运行后触发的,即XLApp
子运行后Workbook_Open
终止。当我引用子AddLocalReferences
,AddModules
和AddClassModules
时,这不会发生,这与他们的名字所暗示的完全相同。子test
仅在调试中打印消息,以测试是否调用其他潜在客户导致XLApp
被终止。
我目前的“预感”是添加引用,模块或类模块计为“编辑”,导致它被终止,如this MS Support document中所述。但是,如果是这样,为什么XLApp
在子结束之前不会被终止?与AddLocalReferences
运行时相反。
为什么课程被终止的任何建议?我需要它“保持活力”,还需要在workbook_open上加载额外的模块和引用。如果需要,可以提供此代码的更多详细信息。
我决定添加 baseCXlEvents类模块的代码:
Option Explicit
Private WithEvents App As Application
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
MsgBox "New Workbook: " & Wb.Name
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
MsgBox "Workbook opened: " & Wb.Name
End Sub
Private Sub Class_Initialize()
Debug.Print "Initializing baseCXlEvents instance.."
Set App = Application
End Sub
Private Sub Class_Terminate()
Debug.Print "Terminating baseCXlEvents instance.."
End Sub
答案 0 :(得分:0)
然后尝试使用Workbook_Open
从创建类baseCXlEvents
的实例中分离Auto_Open
事件处理程序内容(您添加引用等)。
Workbook_Open
,然后运行Auto_Open
。
注意:baseCXlEvents
必须将实例化设置为公开。
ThisWorkbook类
Public XLApp As baseCXlEvents
Private Sub Workbook_Open()
Test
AddLocalReferences
AddModules
AddClassModules
End Sub
标准模块
Sub Auto_Open()
Set ThisWorkbook.XLApp = New baseCXlEvents
End Sub