如何获得一个公共数组,其值在子程序中设置,并且不会在它们被设置的子结尾处被清除?
我试图得到:
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的数组。
答案 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的答案逐个分配数组元素。