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

Kaz*_*Kaz 6 excel vba arguments excel-vba

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

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

call sub(ArrNewClient)
Run Code Online (Sandbox Code Playgroud)

但是我得到一个编译错误:"如果我尝试这个,请输入"Mismatch":

call sub(arrAggregatedArrays(1))
Run Code Online (Sandbox Code Playgroud)

为什么?它有办法吗?

为什么它不能识别arrAggregatedArrays(1)为数组,即使它会UBound像正常一样执行像它一样的函数?

Public arrAggregatedArrays()     As Variant      '/ Holds all the sheet-Data Arrays  
Run Code Online (Sandbox Code Playgroud)

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

      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)
Run Code Online (Sandbox Code Playgroud)

和截图:

编译错误

Bon*_*ond 6

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

Dim v1() As Variant
Dim v2: v2 = Array()
Run Code Online (Sandbox Code Playgroud)

使用前者,您可以使用v1()符号将数组作为子例程参数接收,就像VBA中的任何其他数据类型数组一样.对于后者,您需要将其作为普通变量接收,而不使用数组表示法.

变体是特殊的,因为它们可以包含许多类型,包括数组类型,这就是v = Array()语法有效的原因.当这样做时,它们应该被视为任何其他变量,并以这种方式进出子程序.