为什么我不能传递一个数组(在一个数组中)作为一个参数?

我有一个数组数组arrAggregatedArrays(1 to 8)

我可以这样调用一个子类:

 call sub(ArrNewClient) 

但是我得到一个编译错误:“types不匹配”,如果我试试这个:

 call sub(arrAggregatedArrays(1)) 

为什么? 有没有办法呢?

为什么它不认识arrAggregatedArrays(1)作为一个数组,虽然它会像正常一样执行像UBound这样的函数?

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

'/在一个单独的模块中声明

  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) 

和一个屏幕截图: 编译错误

您可以使用以下两种方法之一创buildVariant数组:

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

使用前者,您将使用v1()表示法将数组作为子例程参数使用,就像使用VBA中的任何其他数据types数组一样。 对于后者,您需要将其作为普通variables接收,而不使用数组表示法。

变体是特殊的,因为它们可以包含许多types,包括数组types,这就是为什么v = Array()语法起作用的原因。 当这样做时,他们应该像其他任何variables一样对待,并通过子程序进出。

正如评论中提到的,您需要更多地展示您正在使用的实现。 这对我有用。

 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 

立即窗口的结果:

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