为什么我不能将数组(在数组内)作为参数传递?
Why can't I pass an array(within an array) as an argument?
我有一个数组数组arrAggregatedArrays(1 to 8)
我可以这样调用子:
call sub(ArrNewClient)
但是我得到一个编译错误:"Type Mismatch" 如果我尝试这个:
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)
和截图:
如评论中所述,您需要展示更多有关您正在使用的实现的信息。这对我有用。
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
即时结果window:
arr_test
0:3
0:2
arr_sub - 0:3
arr_sub - 0:2
您可以通过以下两种方式之一创建 Variant
数组:
Dim v1() As Variant
Dim v2: v2 = Array()
对于前者,您使用 v1()
符号将数组作为子例程参数接收,就像 VBA 中的任何其他数据类型数组一样。对于后者,您需要将其作为普通变量接收,无需数组符号。
变体很特殊,因为它们可以容纳多种类型,包括数组类型,这就是 v = Array()
语法有效的原因。以这种方式完成后,它们应该像对待任何其他变量一样对待,并以这种方式传入和传出子程序。
我有一个数组数组arrAggregatedArrays(1 to 8)
我可以这样调用子:
call sub(ArrNewClient)
但是我得到一个编译错误:"Type Mismatch" 如果我尝试这个:
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)
和截图:
如评论中所述,您需要展示更多有关您正在使用的实现的信息。这对我有用。
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
即时结果window:
arr_test
0:3
0:2
arr_sub - 0:3
arr_sub - 0:2
您可以通过以下两种方式之一创建 Variant
数组:
Dim v1() As Variant
Dim v2: v2 = Array()
对于前者,您使用 v1()
符号将数组作为子例程参数接收,就像 VBA 中的任何其他数据类型数组一样。对于后者,您需要将其作为普通变量接收,无需数组符号。
变体很特殊,因为它们可以容纳多种类型,包括数组类型,这就是 v = Array()
语法有效的原因。以这种方式完成后,它们应该像对待任何其他变量一样对待,并以这种方式传入和传出子程序。