在Excel VBA中如何将关键变量保留在"状态丢失"上(不写入单元格或文件)?

S M*_*den 5 excel vba com-interop excel-vba

Excel VBA是一个灵活的开发环境.它是pesudo编译的.但是,有时在开发过程中会发生"状态损失"."状态损失"是指所有变量都被拆除.实际上,VBA有一个选项"在状态损失前通知"选项进行分类.毫无疑问,在所有情况下都无法编辑和继续编码.但是,有时状态损失会在生产中运行,因为打开其他工作簿可能会导致应用程序会话受到创伤(相信我,它会发生!)

我知道可以将数据保存到工作表单元格甚至文件中,但这不适合尝试保留类的实例,特别是如果它是整个对象图形的锚点.

因此,如果一个人坚持一个记忆保持变量,你如何坚持国家的状态损失?

Flo*_* B. 7

在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)