我有一些我自己的对象,我ThisWorkbook
在 Excel 中实例化了这些对象。我遇到了一些麻烦,我认为问题在于 VBA 在宏结束后立即杀死我的实例。
我们正在使用ThisWorkbook
:
如果我在宏中定义我自己的变量
ThisWorkbook
,该变量的值会在宏完成后返回到初始化值,即使该变量在类中ThisWorkbook
而不是在模块中是 Dim'd。(即 0、Nothing 等)如果我在事件中实例化一个对象
ThisWorkbook
,Workbook_Open()
则该对象在事件完成触发时被销毁。同样,即使变量在类中变暗ThisWorkbook
而不是在子类中Workbook_Open()
我可以做些什么来确保这些对象存活并且这些变量保留它们的值吗?
在ThisWorkbook
:
'Object we want to survive
Dim myInstance As MyObject
Private Sub Open_Workbook()
Set myInstance = new MyObject ' Object is instantiated
End Sub
' Macro 1
Public Sub MyMacro()
Set myInstance = new MyObject ' Object is instantiated
End Sub
' Macro 2
Public Sub CheckInstance()
If Not myInstance is Nothing Then
MsgBox "I found an instance!"
End If
End Sub
打开工作簿或运行宏 1 都不会导致宏 2 找到 myInstance。在这两种情况下,Macro2 都会认为 myInstance 是 Nothing。只有在宏 1 或 Open_Workbook(在它们的 End Sub 之前)调用宏 2 时,它才会找到 myInstance。我需要解决这个问题。(我从单独的表单按钮运行这些宏,而不是在其他宏中。)