遵循构思形式this answer我正在尝试使用VBA在Excel中创建通用持久存储,但是在VBA重置后从存储中检索存储对象时遇到问题。
作为简化示例,假设我想要保留自定义类'MyClass'的实例:
'MyClass
Public someText as String
存储的简化版本:
Public Sub Save()
Dim x As MyClass: Set x = New MyClass
x.initialized = True
Dim domain As mscorlib.AppDomain
Set domain = GetAppDomain()
domain.SetData "x", x
End Sub
Public Sub Load()
Dim y As MyClass 'alternative: Object
Dim domain As mscorlib.AppDomain
Set domain = GetAppDomain
If IsObject(domain.GetData("x")) Then
Set y = domain.GetData("x") 'Type mismatch error
End If
Debug.Print y.initialized 'Run-time error '-2147418105 (80010007)'
End Sub
Public Function GetAppDomain() As mscorlib.AppDomain
Dim host As New mscoree.CorRuntimeHost
host.Start
Dim Unk As IUnknown
host.GetDefaultDomain Unk
Set GetAppDomain = Unk
End Function
当我连续运行Save and Load subs时,我得到了所需的输出(“true”)。但是,如果我重置应用程序(运行>在VBE中重置),我会收到类型不匹配错误。当我将y
的类型更改为Object
时,在尝试打印y.initialized
最初我试图在上面的链接中有一个持久化的词典,在这种情况下,我能够从域中获取词典,键仍然存在,但我无法将包含的对象强制转换回来它的原始课程。
任何想法如何解决?