2012-05-30 91 views
0

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

当我进入的代码,如果我找ARR1它的定义不工作陈述

Global arr1, arr2, arr3 

的例子可以找到。如果我查找arr2或arr3,我会收到一条消息,指出“无法识别cusor下的标识符”。如果我将arr3移动到一条新线并如此剥离:

Global arr1, arr2 
Global arr3 

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

+1

'全球A,B,C'是好的,所有3个应该没有问题定义,您需要扩展你的例子。您可以将'option explicit'添加到模块的顶部;这会导致VBA在您尝试使用未声明/超出范围变量时引发错误。 (它最好定义一个类型'全局a()作为字符串,b()作为字符串...') –

+1

在这两种情况下,所有变量''arr1'',''arr2''和''arr3'' if声明你指定的方式应该工作。所有这些都是“变体”类型。如果您不明确声明任何类型,则所有变量都变为“TypeOf”变体默认值。 – Cylian

+0

我也可以如上所述声明变量,并在相同模块和其他模块中的以下代码中查看它们的定义。我第二次由@亚历克斯推荐。使用Option Explicit。关于全局变量的一件事是,它们不能在类中声明 - 它不会被编译(但这显然不是你的问题)。 –

回答

0

这工作

Global arr1, arr2, arr3 

Sub test() 

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

End Sub 

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

0

我不确定使用“Global”而不是“Public”。我不认为前者实际上是记录在案的。 但无论如何,arrX都是类型变体。他们不是专门阵列,直到被强制。 正如在以前的评论中提到,数组可以声明如下: 暗淡ARR1()为的myType 暗淡ARR2(1〜10)的myType

某处代码,你还需要初始化ARR1 的结构Redim arr1(i to j)

这比安装变体更安全,更高效。 变体可以高效地读写数据块,但如果要使用它们,最好将它们转换为数组。

这里有几个参考的,除了MSDN:

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

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