S M*_*den 5 excel vba com-interop excel-vba
Excel VBA是一个灵活的开发环境.它是pesudo编译的.但是,有时在开发过程中会发生"状态损失"."状态损失"是指所有变量都被拆除.实际上,VBA有一个选项"在状态损失前通知"选项进行分类.毫无疑问,在所有情况下都无法编辑和继续编码.但是,有时状态损失会在生产中运行,因为打开其他工作簿可能会导致应用程序会话受到创伤(相信我,它会发生!)
我知道可以将数据保存到工作表单元格甚至文件中,但这不适合尝试保留类的实例,特别是如果它是整个对象图形的锚点.
因此,如果一个人坚持一个记忆保持变量,你如何坚持国家的状态损失?
在Excel的生命周期中保持数据持久性的一种方法是将它们存储在附加到实例的默认.Net域中:
Sub Usage()
Dim dict As Object
Set dict = GetPersistentDictionary()
End Sub
Run Code Online (Sandbox Code Playgroud)
Public Function GetPersistentDictionary() As Object
' References:
' mscorlib.dll
' Common Language Runtime Execution Engine
Const name = "weak-data"
Static dict As Object
If dict Is Nothing Then
Dim host As New mscoree.CorRuntimeHost
Dim domain As mscorlib.AppDomain
host.Start
host.GetDefaultDomain domain
If IsObject(domain.GetData(name)) Then
Set dict = domain.GetData(name)
Else
Set dict = CreateObject("Scripting.Dictionary")
domain.SetData name, dict
End If
End If
Set GetPersistentDictionary = dict
End Function
Run Code Online (Sandbox Code Playgroud)