2015-08-23 16 views
6

Ho un array di array arrAggregatedArrays(1 to 8)Perché non posso passare un array (all'interno di un array) come argomento?

posso chiamare un sub in questo modo:

call sub(ArrNewClient) 

Ma ottengo un errore di compilazione: "Non corrispondenza del tipo" se provo questo:

call sub(arrAggregatedArrays(1)) 

Perché? E c'è un modo per aggirarlo?

e perché non riconosce arrAggregatedArrays(1) come una matrice anche se eseguirà funzioni come UBound su di esso come normale?

Public arrAggregatedArrays()  As Variant  '/ Holds all the sheet-Data Arrays 

'/ dichiarata in un modulo separato

 ReDim arrAggregatedArrays(1 To 8) 
      arrAggregatedArrays(1) = arrNewClient 
      arrAggregatedArrays(2) = arrExistingClient 
      arrAggregatedArrays(3) = arrGroupSchemes 
      arrAggregatedArrays(4) = arrOther 
      arrAggregatedArrays(5) = arrMcOngoing 
      arrAggregatedArrays(6) = arrJhOngoing 
      arrAggregatedArrays(7) = arrAegonQuilterArc 
      arrAggregatedArrays(8) = arrAscentric 

     Call FilterSheetArrayForColumns(arrAggregatedArrays(1)) 

Public Sub FilterSheetArrayForColumns(ByRef arrCurrentArray() As Variant) 

e uno screenshot: Compile Error

+0

Devi mostrarci le tue dichiarazioni e come questa variabile è inizializzata. – RBarryYoung

+0

Scuse, dettagli aggiunti. – Kaz

+0

@Zak - Ora dobbiamo solo vedere la dichiarazione della funzione per 'FilterSheetArrayForColumns()'. La mia ipotesi è che tu la stia ricevendo come 'A() As Variant' invece di' a As Variant'. Le varianti sono speciali. La variabile può essere utilizzata da sola per rappresentare una matrice. – Bond

risposta

6

è possibile creare una matrice Variant in uno dei due modi:

Dim v1() As Variant 
Dim v2: v2 = Array() 

Con la prima, si riceve l'array come sottoprogramma parametro usando la notazione v1(), come con qualsiasi altra matrice di tipi di dati in VBA. Con quest'ultimo, è necessario riceverlo come variabile normale, senza la notazione dell'array.

Le varianti sono speciali perché possono contenere molti tipi, inclusi i tipi di array, motivo per cui la sintassi v = Array() funziona. Quando fatto in questo modo, dovrebbero essere trattati come qualsiasi altra variabile e passati così dentro e fuori le subroutine.

+0

Grazie.Puoi spiegare perché/come 'array' e' array() 'sono diversi l'uno dall'altro, in termini di come il programma li percepisce/opera su di essi? – Kaz

+0

Mi piacerebbe capire i concetti sottostanti coinvolti. – Kaz

+0

e se non riesco a passare 'array' a una funzione che si aspetta' array() 'vuol dire anche che non posso passare' array() 'a una funzione che si aspetta' array'? – Kaz

1

Come accennato nei commenti, è necessario mostrare più sulla realizzazione che si sta utilizzando. Questo funziona per me.

Sub arr_test() 
    Dim arr As Variant 

    arr = Array(Array(1, 2, 3), Array(2, 3, 4), _ 
       Array(3, 4, 5), Array(4, 5, 6)) 

    Debug.Print LBound(arr, 1) & ":" & UBound(arr, 1) 
    Debug.Print LBound(arr(1), 1) & ":" & UBound(arr(1), 1) 

    Call arr_sub(arr) 
    Call arr_sub(arr(1)) 

End Sub 

Sub arr_sub(tarr As Variant) 
    Debug.Print "arr_sub - "; LBound(tarr, 1) & ":" & UBound(tarr, 1) 
End Sub 

I risultati finestra immediata:

arr_test 
0:3 
0:2 
arr_sub - 0:3 
arr_sub - 0:2 
+0

Scuse, dettagli aggiunti. – Kaz

Problemi correlati