gpt4 book ai didi

vba - 在 Excel VBA 中,如何在 'state loss' 上保留关键变量(不写入单元格或文件)?

转载 作者:行者123 更新时间:2023-12-02 07:36:05 26 4
gpt4 key购买 nike

Excel VBA 是一个灵活的开发环境。它是伪编译的。然而,有时在开发过程中可能会发生“状态丢失”。 “状态损失”是指所有变量都被覆盖。事实上,VBA 有一个用于分类的“状态丢失前通知”选项。毫不奇怪,在所有情况下都无法编辑并继续代码。但是,有时在生产中运行时会发生状态丢失,因为打开其他一些工作簿可能会对您的应用程序 session 造成创伤(相信我,这种情况会发生!)

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

那么,在坚持使用内存保存变量的情况下,如何在状态丢失时保持状态?

最佳答案

在 Excel 的生命周期内保持数据持久的一种方法是将它们存储在附加到实例的默认 .Net 域中:

Sub Usage()
Dim dict As Object
Set dict = GetPersistentDictionary()
End Sub
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

关于vba - 在 Excel VBA 中,如何在 'state loss' 上保留关键变量(不写入单元格或文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38952243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com