我正在尝试声明一个公共字典变量,只要工作簿打开就能生存。目前我正在使用我的一个模块的顶部:
ChangeDetectionStrategy.OnPush
我可以从同一模块中的多个subs访问它,但是一旦所有代码完成运行,它就会超出范围。我已经尝试在Workbook_Open()子句中声明它,但这似乎也没有生存。
我这样做的原因是:我正在加载大量外部XML信息,我需要在工作表快速打开时动态访问(所以我不想每次都重新加载xml)。相反,我宁愿在开始时加载XML,将相关信息分类到执行我需要的工作的自定义类的实例中。
有什么建议吗?
由于
我已经根据下面的建议添加了代码,但是一旦代码完成运行,字典似乎仍然超出范围。当其他潜艇尝试访问它时,我收到“需要对象”错误
Public dict As Scripting.Dictionary
答案 0 :(得分:1)
将公共字典声明添加到ThisWorkbook
模块。它也是放置Workbook_Open()
事件处理程序以填充它的好地方。
只要在工作簿打开时XML文件中的数据不会发生变化,这就可以正常工作。您可以编写其他触发器以在必要时刷新数据。根据XML的格式,您还可以将XML数据存储在隐藏的工作表中以用作全局存储。
编辑添加了代码示例
Option Explicit
Public xmlDict As Scripting.Dictionary
Private Sub Workbook_Open()
Set xmlDict = New Scripting.Dictionary
'--- read your XML file here and initialize
' the dictionary
End Sub
作为替代方案(并且取决于您在字典中存储和访问数据的方式),您可以创建自己的Class
来访问存储的数据,使用Get
属性并取消关联结构来自调用函数的数据。 (它可能仍然是字典,或任何其他数据存储/结构,并始终保持相同的接口。)