Vba 为什么可以';我是否将数组(在数组中)作为参数传递?
我有一个数组Vba 为什么可以';我是否将数组(在数组中)作为参数传递?,vba,excel,arguments,Vba,Excel,Arguments,我有一个数组arraggratedarrays(1到8) 我可以这样叫潜艇: call sub(ArrNewClient) 但如果我尝试以下方法,就会出现编译错误:“类型不匹配”: call sub(arrAggregatedArrays(1)) 为什么??有办法解决吗 为什么它不能将arraggratedarray(1)识别为一个数组,即使它会像正常情况一样在其上执行UBound之类的功能 Public arrAggregatedArrays() As Variant '
arraggratedarrays(1到8)
我可以这样叫潜艇:
call sub(ArrNewClient)
但如果我尝试以下方法,就会出现编译错误:“类型不匹配”:
call sub(arrAggregatedArrays(1))
为什么??有办法解决吗
为什么它不能将arraggratedarray(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
即时窗口中的结果:
arr_test
0:3
0:2
arr_sub - 0:3
arr_sub - 0:2
您可以通过以下两种方式之一创建
变体数组:
Dim v1() As Variant
Dim v2: v2 = Array()
对于前者,您可以使用v1()
符号作为子例程参数接收数组,就像VBA中的任何其他数据类型数组一样。对于后者,您需要将其作为普通变量接收,而不使用数组表示法
变体是特殊的,因为它们可以包含许多类型,包括数组类型,这就是v=array()
语法起作用的原因。当这样做时,它们应该像对待任何其他变量一样,以这种方式传入和传出子例程。您需要向我们展示您的声明以及该变量是如何初始化的。抱歉,添加了详细信息。@Zak-现在我们只需要查看filterseetarrayforcolumns()的函数声明。
。我猜您将它作为a()变量
而不是a变量
接收。变种是特殊的。变量本身可以用来表示数组。那么将数组作为array
传递和作为array()
传递有什么区别呢?@Zak-我添加了一个答案来解释这一区别。抱歉,添加了详细信息。谢谢。你能解释一下为什么/如何array
和array()
在程序对它们的感知/操作方面是不同的吗?我想了解其中涉及的基本概念。如果我不能将array
传递给一个期望array()
的函数,这是否意味着我也不能传递array()
对于一个需要数组的函数来说
?除了它们的传递方式之外,两者之间没有太大区别。变量
变量可用于存储任何类型的数组。例如,您可以将s(0)设置为字符串,然后将其分配给变量,如下所示:将v设置为变量:v=s
。因此,从概念上来说,它可能有助于将其视为一种通用的东西,而不仅仅是一种内在价值。我相信您也看到过将对象分配给变量的示例。变量的Dim v1()和变量的Dim v2:v2=Array()
之间有一个细微的区别。后者可以对其边界进行安全测试(LBound=0
,UBound=-1
),如果您需要根据其当前大小动态调整其大小,这将非常有用:例如,ReDim v2(UBound(v2)+1)
。使用前一种方法是不可能的。