为什么我不能传递一个数组(在一个数组中)作为一个参数?
我有一个数组数组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