Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Excel vba:在数组中存储数组、嵌套数组、锯齿数组_Arrays_Vba_Excel - Fatal编程技术网

Arrays Excel vba:在数组中存储数组、嵌套数组、锯齿数组

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(...)

我有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(...)
            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如果有效,请执行此操作。我不知道有什么危险,我一直在使用集合(尽管我通常不会将它们封装在类型中)。