ParamArray
在Sub、Function或Property过程的参数列表中使用,指示最后一个参数是开放式参数列表。ParamArray关键字允许过程在调用点接受任意数量的参数。
语法:
[ Public | Private | Friend ] [ Static ] Sub | Function | Property Get | Property Let | Property Set name ( [ arglist, ] ParamArray varname[ () ] [ As type ] )
- varname
- 表示ParamArray的变量名称;遵循标准变量命名约定。
- type
- 可选 必须为Variant(显式指定或默认)。在调用点提供的每个参数可以是不同的数据类型,因此ParamArray必须始终是Variant元素的数组。
ParamArray必须是Sub、Function或Property Get过程参数列表中的最后一个参数。在Property Let或Property Set过程中,它必须在value/reference参数之前,因此不能是唯一的参数。
ParamArray不能与同一参数上的Optional、ByVal或ByRef组合——提供给ParamArray的参数始终以引用方式作为Variant数组的元素传递。
当调用过程时,调用中提供的每个参数成为Variant数组的对应元素。如果没有为ParamArray位置提供参数,则数组为空。
INFO
定义了ParamArray参数的过程不能使用命名参数语法调用。此类过程的所有参数必须是位置参数。要在调用点省略ParamArray位置中的个别元素,请在逗号之间留空。
示例
本示例定义了一个使用ParamArray对任意数量数值参数求和的函数。
vb
Function CalcSum(ParamArray Args() As Variant) As Double
Dim Total As Double, i As Long
For i = LBound(Args) To UBound(Args)
Total = Total + CDbl(Args(i))
Next i
CalcSum = Total
End Function
' Calls of varying arity:
Debug.Print CalcSum() ' 0
Debug.Print CalcSum(1) ' 1
Debug.Print CalcSum(1, 2, 3, 4) ' 10
Debug.Print CalcSum(1.5, 2.5, 3#) ' 7ParamArray可以跟在普通的位置参数之后;只有固定前导列表之后的参数参与可变参数尾部。
vb
Function Concat(ByVal Separator As String, ParamArray Parts() As Variant) As String
Dim i As Long, s As String
For i = LBound(Parts) To UBound(Parts)
If i > LBound(Parts) Then s = s & Separator
s = s & CStr(Parts(i))
Next i
Concat = s
End Function
Debug.Print Concat(", ", "one", "two", "three") ' "one, two, three"