在VBA中声明和填充Globel级字典变量

时间:2018-10-02 23:11:23

标签: excel vba excel-vba dictionary global-variables

所以我有一个字典,它在模块的两个不同子目录中包含相同的键和值。也就是说,在子代码中有一些重复的代码,它们是:Dim Dict As Scripting.Dictionary和Dict.Add Key,使用Value来填充它。我以为应该将字典设为全局/模块级别的变量,但是在弄清楚如何在更大范围内填充字典时遇到了麻烦。

我的模块开始看起来像:

Option Explicit
Option Compare Text ' for some other stuff I need to do
Public Dict As Scripting.Dictionary

只是将Dict.Add放在任何子命令之前似乎都不起作用,我得到一个编译错误:无效的外部过程。

任何提示或技巧将不胜感激!

1 个答案:

答案 0 :(得分:0)

假设您已将Microsoft脚本运行时添加到项目引用中,那么这应该可以工作。

Option Explicit
Option Compare Text
Public Dict As New Scripting.Dictionary

Sub d1()
    Dict.Item(1) = 2
End Sub

Sub da()
    Dict.Item("a") = "b"
End Sub

但是,如果您期望您的公共词典包含vbTextCompare的dict.CompareMode,那将是错误的。 CompareMode属性将为vbBinaryCompare,并且CompareMode只能在空字典中设置。

如果您的字典需要vbTextCompare,则可能是这样的。

Option Explicit
Option Compare Text
Public Dict As New Scripting.Dictionary

Sub d1()
    if dict.count = 0 then dict.comparemode = vbtextcompare
    Dict.Item(1) = 2
End Sub

Sub da()
    if dict.count = 0 then dict.comparemode = vbtextcompare
    Dict.Item("a") = "b"
End Sub