Hacer reference a la misma matriz en diferentes subs en VBA Excel

Tengo una function que llena una determinada matriz con valores de celda, según qué OptionButton esté seleccionado. ¿Cómo haría reference a esas mismas matrices en una function separada que alimentaría esos valores nuevamente dentro de las células? Aquí está mi código (de trabajo) hasta el momento.

Private Sub CommandButton1_Click() Dim wave1Array(0 To 30) As String Dim wave2Array(0 To 30) As String Dim wave3Array(0 To 30) As String Dim wave4Array(0 To 30) As String Dim wave5Array(0 To 30) As String Dim rng As Range Dim cell As Range Dim counter As Long Set rng = Range("B2", "AF2") counter = 0 If OptionButton6.Value = True Then For Each cell In rng wave1Array(counter) = cell.Value counter = counter + 1 Next cell ElseIf OptionButton7.Value = True Then For Each cell In rng wave2Array(counter) = cell.Value counter = counter + 1 Next cell ElseIf OptionButton8.Value = True Then For Each cell In rng wave3Array(counter) = cell.Value counter = counter + 1 Next cell ElseIf OptionButton9.Value = True Then For Each cell In rng wave4Array(counter) = cell.Value counter = counter + 1 Next cell ElseIf OptionButton10.Value = True Then For Each cell In rng wave5Array(counter) = cell.Value counter = counter + 1 Next cell End If End Sub 

Tienes algunas opciones diferentes que puedo pensar.

Como otros han mencionado, crea una variable a nivel de module según sea necesario. Estas declaraciones deben ir en el mismo module de código que los controles de su formulario. Si los controles de formulario están en una forma de usuario, entonces deben declararse en el module de código del formulario, no en un module "estándar".

 '-------------------------------- all in the same code module ------------- Option Explicit Dim myVariable as String Private Sub CommandButton1_Click() myVariable = "Hello, world!" End Sub Private Sub CommandButton2_Click() msgBox myVariable End Sub '------------------------------- end of this example ---------------------- 

La variable pública / GLobal puede ser una opción, pero recuerdo que hay algunas limitaciones al usar estos con UserForms, y como no estoy seguro de si está usando un UserForm, no lo recomendaré.

Una tercera opción sería pasar los arguments de un procedimiento a otro, pero eso generalmente solo funciona con procedimientos / funciones "encadenados", como cuando una function llama a otra function y eso no parece ser lo que estás haciendo en absoluto.

Para su caso específico:

También puede simplificar su código para evitar el uso del counter y cell variables de cell , utilizando la asignación directa de range a matriz.

 'Module-level array variables, accessible by other procedures in this module: Dim wave1Array() Dim wave2Array() Dim wave3Array() Dim wave4Array() Dim wave5Array() Dim wave6Array() Private Sub CommandButton1_Click() Dim rng As Range Dim arr() Set rng = Range("B2", "AF2") '## Converts the row to an array (0 to 30) arr = Application.Transpose(Application.Transpose(rng.Value)) '## Assigns the array from above to one of the module-level array variables: If OptionButton6.Value = True Then wave1Array = arr If OptionButton7.Value = True Then wave2Array = arr If OptionButton8.Value = True Then wave3Array = arr If OptionButton9.Value = True Then wave4Array = arr If OptionButton10.Value = True Then wave5Array = arr If OptionButton11.Value = True Then wave6Array = arr End Sub 

Tenga en count que para hacer esto, tendrá que declararlos como matrices variantes, ya que un range de celdas .Value es un tipo de variante (las celdas pueden contener valores de error que creo que fallarán si intenta asignar una matriz de cadenas).

SI debe usar matrices String estrictas, necesitará usar el counter y cell iteración de cell .