2017-08-25 97 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