我找不到任何文件来支持我的发现,但这就是我在这里的原因。在我的模块中,我声明了多个全局数组,这本身不是问题,但似乎正在发生的事情是,如果我尝试在一个语句中声明多个数组,则只初始化第一个数组。任何人都可以确认这是行为和/或指向支持此文档的文档吗?
不工作声明的示例
Global arr1, arr2, arr3
如果我查找arr1的定义,当我进入代码时,可以找到它。如果我查找arr2或arr3,我会收到一条消息“无法识别cusor下的标识符”。如果我将arr3移动到一个新行并将其decalre:
Global arr1, arr2
Global arr3
现在已经认识到了。所以我不知道这是否是已知的行为,错误或其他。
答案 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/