2017-08-25 96 views
1

我有3個數組,每個數組包含3個範圍。我想將這些數組存儲在一個數組中。我儘量做到以下幾點:Excel vba:存儲陣列,嵌套數組,鋸齒陣列

Function test()   
      Dim a() As Range 
      Dim b() As Range 
      Dim c() As Range 
      a = getA(dataWorkbook) 'a(1)=Range(...), a(2)=Range(...), a(3)=Range(...) 
      b = getB(dataWorkbook) 
      c = getC(dataWorkbook) 

      Dim allArrays(1 To 3) As Range 
      ' allArrays(1) = a 
      ' allArrays(2) = b 
      ' allArrays(3) = c 

      test="HELLO" 
End Function 

但是,如果我去掉線,allArrays分配,函數返回值,而不是「HELLO!」。我做錯了什麼?

+1

您添加到'allArrays'的值不是'Range'類型。 – Phylogenesis

+1

a,b和c不是範圍類型,而是範圍數組。 allArrays需要Range變量,而不是數組。 –

+0

那我應該怎麼申報呢? – Ans

回答

1

創建交錯數組的最佳方法是使用一個Variant

Dim allArrays As Variant 
ReDim allArrays(1 To 3) 
'rest of code will work as intended 

您可以簡化代碼,只是使用Array功能:

Dim allArrays As Variant 
allArrays = Array(a, b, c) 

雖然在這種情況allArrays會基於0而不是基於1的。

+0

我將如何訪問元素 - 範圍?我嘗試過'allArrays(1)(1)'和'allArrays(1,1)'。我將它傳遞給一個需要'Range'的函數。前者給出了一個ByRef錯誤(傳入的類型不是'Range'),後面的'錯誤的維數'錯誤。 – Ans

+0

@你可以使用'allArrays(1)(1)'。就'ByRef'問題而言,你可以改變函數,以便它期望一個'Variant'(這種靈活類型可以清除'ByRef'問題)。如果情況變得更糟,您可以聲明範圍變量'R',然後'設置R = allArrays(1)(1)'並將'R'傳遞給該函數。 –

+0

爲什麼這個錯誤發生?這是不是意味着什麼是錯的 - 否則Range類型會被傳遞?如果不是Range,通過了什麼? – Ans