Excel VBA全局变量

时间:2012-05-30 14:17:51

标签: arrays vba variables global

我找不到任何文件来支持我的发现,但这就是我在这里的原因。在我的模块中,我声明了多个全局数组,这本身不是问题,但似乎正在发生的事情是,如果我尝试在一个语句中声明多个数组,则只初始化第一个数组。任何人都可以确认这是行为和/或指向支持此文档的文档吗?

不工作声明的示例

Global arr1, arr2, arr3

如果我查找arr1的定义,当我进入代码时,可以找到它。如果我查找arr2或arr3,我会收到一条消息“无法识别cusor下的标识符”。如果我将arr3移动到一个新行并将其decalre:

Global arr1, arr2
Global arr3

现在已经认识到了。所以我不知道这是否是已知的行为,错误或其他。

2 个答案:

答案 0 :(得分:0)

这有效

Global arr1, arr2, arr3

Sub test()

    Debug.Print CLng(arr1)
    Debug.Print CLng(arr2)
    Debug.Print CLng(arr3)

End Sub

因为它打印三个零。你说“如果我寻找”的定义,但我不确定这意味着什么。如果我在代码中放置断点并将鼠标悬停在变量上,则它们都返回“Empty”。

答案 1 :(得分:0)

我不确定使用“全球”代替“公共”。我不认为前者实际上是有记录的。 但无论如何,arrX都是类型变体。在强制之前,它们不是特定的阵列。 正如前面的注释中所提到的,数组可以像这样声明: 将arr1()调暗为myType 将arr2(1到10)调暗为myType

在代码中的某处,您还需要初始化arr1的结构 Redim arr1(i到j)

这比使用变体更加安全和高效。 变量可以高效地读取和写入数据块,但如果要与它们一起使用,最好将它们转换为数组。

除了MSDN之外,以下是一些参考文献:

http://www.cpearson.com/excel/topic.aspx

http://fastexcel.wordpress.com/2011/05/25/writing-efficient-vba-udfs-part-1/