Открытый массив для перемешивания значений между подпрограммами? - PullRequest
1 голос
/ 08 октября 2011

Как получить открытый массив, значения которого установлены в подпрограмме и не очищаются в конце подпрограммы, в которой они были установлены?

Я пытался получить:

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, но я получаю сообщение об ошибке в подпункте Two, жалующемся на отсутствие значений в GlobalArray (на самом деле, даже подпункт One жалуется на отсутствие GlobalArray для вставки).

По сути, у меня есть процедура (Одна), извлекающая данные из разрозненных источников, делающая с ними что-то, позволяющая пользователю делать некоторые вещи в Excel, и затем запускающая новую подпрограмму (Две), которая использует как пользовательский ввод, так и некоторые измассивы из sub One.

Ответы [ 2 ]

3 голосов
/ 08 октября 2011

Публичная переменная 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 голос
/ 08 октября 2011

Это не VBA и не будет компилироваться: GlobalArray=("0","1","2")

Вместо этого вы можете использовать: GlobalArray = Array("0", "1", "2")

, но для этого требуется объявить Public GlobalArray() As Variant

В противном случаеприсвойте элементы массива один за другим, как в ответе @ Readfidy.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...