开发者

Public array to shuffle values between subroutines?

开发者 https://www.devze.com 2023-04-12 02:18 出处:网络
How do I get a public array whose values are set within a subroutine and do not get cleared at the end of the sub in which they were set?

How do I get a public array whose values are set within a subroutine and do not get cleared at the end of the sub in which they were set?

I tried to get:

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

such that Check = 2, but I get thrown an error in sub Two complaining about a lack of values in GlobalArray (in fact, even sub One complains that there is no GlobalArray to put things in).

Basically, I h开发者_Python百科ave a procedure (One) pulling data from disparate sources, doing some stuff with it, letting the user do some things in Excel, and then running a new subroutine (Two) that uses both the user's input and some of the arrays from sub One.


The Public GlobalArray() variable must be declared in a module. It will not work if it is declared at the top of either a Worksheet or the ThisWorkbook module. Try:

'// 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

Instead of a public variable you could pass it to the second function:

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


This is not VBA and won't compile: GlobalArray=("0","1","2")

You could instead use: GlobalArray = Array("0", "1", "2")

but that requires declaring Public GlobalArray() As Variant

Otherwise assign the array elements one by one as in @Readfidy's answer.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号