Arrays Excel vba:在数组中存储数组、嵌套数组、锯齿数组
我有3个数组,每个数组包含3个范围。我想将这些数组存储在一个数组中。我试着做到以下几点:Arrays Excel vba:在数组中存储数组、嵌套数组、锯齿数组,arrays,vba,excel,Arrays,Vba,Excel,我有3个数组,每个数组包含3个范围。我想将这些数组存储在一个数组中。我试着做到以下几点: 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(...)
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
但是,如果我用
allarray
assignment取消对行的注释,函数将返回!值而不是“HELLO”。我做错了什么?创建锯齿状数组的最佳方法是使用变体:
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)
尽管在这种情况下,allarray
将基于0而不是基于1。添加到allarray
的值不属于范围
类型。a、b和c不属于范围类型,而是范围数组类型。Allarray需要的是范围变量,而不是数组。那么我应该如何声明它?我应该如何访问元素-范围?我尝试了allarray(1)(1)
和allarray(1,1)
。我将其传递给一个函数,该函数需要范围
。前者给出一个ByRef
错误(传递的类型不是Range
),后者给出一个错误的维度数
错误。@Ans您将使用AllArray(1)(1)
。至于ByRef
问题,您可以更改函数,使其期望变量(这种灵活的类型有一种解决ByRef
问题的方法)。如果情况变得更糟,您可以声明一个范围变量R
,然后设置R=allarray(1)(1)
并将R
传递给函数。为什么会发生这种错误?这难道不意味着出了问题——否则就会传递范围类型吗?如果不是范围,则传递什么?传递的是范围
变量
类型的子类型。这似乎是VBA语言中的一个缺陷,它不够好。如果所有范围数组(a
、b
、c
)的长度相同,则可能需要将它们加载到二维范围数组中,但这需要循环来加载,而不是简单的赋值语句。@Ans如果有效,请执行此操作。我不知道有什么危险,我一直在使用集合(尽管我通常不会将它们封装在类型中)。