如何:定义参数数量不确定的过程
可以将“参数数组”声明为过程的参数列表中的最后一项。这允许过程接受参数的一组值,而不仅仅是一个值。定义过程时不必知道该组中值的数目。该组由对过程的每次调用单独确定,每次调用可以传递不同数目的值。
有关更多信息,请参见参数数组。
定义一个可以为其最后参数接受不确定数量的值的过程
1.在过程声明中,以普通方法定义参数列表。除最后一个参数以外的所有参数均为必选(不是 Optional (Visual Basic))。
2.在最后一个参数名称前面使用关键字 ByVal ParamArray。该参数自动为可选。不要包含 Optional 关键字。
3.在参数数组名称后面使用一对空括号。
4.在空括号后面使用常用的 As 子句。
5.不要在 As 子句后带默认值。参数数组的默认值自动为您在 As 子句中指定的数据类型的一维空数组。
使用参数数组值
过程内部的代码必须将参数数组视为一维数组,其中每个元素的数据类型都与 ParamArray 数据类型相同。
访问参数数组的其中一个值
1.在过程代码中,通过在参数数组名称上调用 UBound 函数 (Visual Basic) 确定传递到参数数组的数组长度。
2.在过程代码的可执行语句中,在参数数组名称后面使用带括号的下标。该下标应在 0 和由 UBound 返回的上限之间。
安全注意
每当处理可能变得无限大的数组时,都有耗尽应用程序的某部分内部容量的风险。如果在调用代码中接受一个参数数组,您应该测试它的长度,如果它对于应用程序而言太大,应采取适当步骤。
示例
下面的示例定义带有参数数组的过程,并输出所有传递到参数数组的数组元素的值。
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine(“Scores for ” & name & “:” & vbCrLf)
‘ Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine(“Score ” & i & “: ” & scores(i))
Next i
End Sub
下面的示例演示典型的 studentScores 调用。
Call studentScores(“Anne”, “10”, “26”, “32”, “15”, “22”, “24”, “16”)
Call studentScores(“Mary”, “High”, “Low”, “Average”, “High”)
Dim JohnScores() As String = {“35”, “Absent”, “21”, “30”}
Call studentScores(“John”, JohnScores)
请确保 ParamArray 是参数列表中的最后参数,而且前面的参数都没有声明为 Optional。
关于参数的声明,总共有以下说明
其中的 arglist 参数的语法以及语法各个部分如下:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]
部分 描述
Optional 可选的。表示参数不是必需的关键字。如果使用了该选项,则 arglist 中的后续参数都必须是可选的,而且必须都使用 Optional 关键字声明。如果使用了 ParamArray,则任何参数都不能使用 Optional。
ByVal 可选的。表示该参数按值传递。
ByRef 可选的。表示该参数按地址传递。ByRef 是 Visual Basic 的缺省选项。
ParamArray 可选的。只用于 arglist 的最后一个参数,指明最后这个参数是一个 Variant 元素的 Optional 数组。使用 ParamArray 关键字可以提供任意数目的参数。ParamArray 关键字不能与 ByVal,ByRef,或 Optional 一起使用。
varname 必需的。代表参数的变量的名称;遵循标准的变量命名约定。
type 可选的。传递给该过程的参数的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、 String(只支持变长)、Object 或 Variant。如果没有选择参数 Optional,则可以指定用户定义类型,或对象类型。
defaultvalue 可选的。任何常数或常数表达式。只对 Optional 参数合法。如果类型为 Object,则显式的缺省值只能是 Nothing。
实践小例子 调试通过
private sub test (a as long, ParamArray b())
end sub
private sub command1_click
call test(1,2,3,4,5,6,7…)
end sub
参考资料来源:
CSDN,MSDN
————————————————
原文链接:https://blog.csdn.net/smallboy_5/article/details/3118349
Views: 25