公共数组在子程序之间重排值?

时间:2011-10-07 22:20:24

标签: vba

如何获得一个公共数组,其值在子程序中设置,并且不会在它们被设置的子结尾处被清除?

我试图得到:

Public GlobalArray() as Variant

Sub One()
    ReDim GlobalArray(0 to 2)
    GlobalArray=Array("0","1","2")
End Sub

Sub Two()
    Check = GlobalArray(2)
End Sub

这样Check = 2,但是我在第二篇文章中抛出了一个错误,抱怨GlobalArray中缺少值(事实上,甚至sub one抱怨没有GlobalArray可以放入内容)。

基本上,我有一个程序(一个)从不同的来源提取数据,用它做一些事情,让用户在Excel中做一些事情,然后运行一个使用用户输入和一些的新子程序(二)来自子One的数组。

2 个答案:

答案 0 :(得分:3)

必须在模块中声明Public GlobalArray()变量。如果在工作表或ThisWorkbook模块的顶部声明它,它将无法工作。尝试:

'// Must be declared in a module    
Public GlobalArray() As Integer

'// These routines can be in worksheet/thisworkbook modules along side events etc Or in a module
Sub One()
    ReDim GlobalArray(0 To 2)
    GlobalArray(0) = 0
    GlobalArray(1) = 1
    GlobalArray(2) = 2
End Sub

Sub Two()
    check = GlobalArray(2)
    MsgBox (check)
End Sub

您可以将其传递给第二个函数,而不是公共变量:

Sub One()

    Dim GlobalArray(0 To 2) As Integer
    GlobalArray(0) = 0
    GlobalArray(1) = 1
    GlobalArray(2) = 2

    Two GlobalArrayToMe:=GlobalArray
End Sub

Sub Two(ByRef GlobalArrayToMe() As Integer)

    check = GlobalArrayToMe(2)
    MsgBox (check)

End Sub

答案 1 :(得分:1)

这不是VBA,不会编译:{{1​​}}

您可以使用:GlobalArray=("0","1","2")

但这需要声明GlobalArray = Array("0", "1", "2")

否则按照@Readfidy的答案逐个分配数组元素。