Excel 2013 VBA - 全局字典变量声明

时间:2016-04-18 19:13:34

标签: excel vba excel-vba

我正在尝试声明一个公共字典变量,只要工作簿打开就能生存。目前我正在使用我的一个模块的顶部:

ChangeDetectionStrategy.OnPush

我可以从同一模块中的多个subs访问它,但是一旦所有代码完成运行,它就会超出范围。我已经尝试在Workbook_Open()子句中声明它,但这似乎也没有生存。

我这样做的原因是:我正在加载大量外部XML信息,我需要在工作表快速打开时动态访问(所以我不想每次都重新加载xml)。相反,我宁愿在开始时加载XML,将相关信息分类到执行我需要的工作的自定义类的实例中。

有什么建议吗?

由于

编辑:

我已经根据下面的建议添加了代码,但是一旦代码完成运行,字典似乎仍然超出范围。当其他潜艇尝试访问它时,我收到“需要对象”错误

Public dict As Scripting.Dictionary

1 个答案:

答案 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属性并取消关联结构来自调用函数的数据。 (它可能仍然是字典,或任何其他数据存储/结构,并始终保持相同的接口。)