通过位置和通过名称的参数传递
更新:2007 年 11 月
在调用 Sub 或 Function 过程时,可以“通过位置”传递参数(即按参数出现在过程定义中的顺序),或者“通过名称”传递参数而不考虑位置。
通过名称传递参数时,指定参数的声明名称,后接冒号和等号 (:=),后面是参数值。可以按照任意的顺序提供命名参数。
例如,下面的 Sub 过程带三个参数:
Sub studentInfo(ByVal name As String, _
Optional ByVal age As Short = 0, _
Optional ByVal birth As Date = #1/1/2000#)
Debug.WriteLine("Name = " & name & _
"; age = " & CStr(age) & _
"; birth date = " & CStr(birth))
End Sub
调用该过程时,可以通过位置、通过名称或者两者的混合来提供参数。
通过位置传递参数
可以通过位置传递参数(以逗号分隔)来调用 studentInfo 过程,如下例所示:
Call studentInfo("Mary", 19, #9/21/1981#)
如果在一个按位置排列的参数列表中省略可选参数,必须用逗号保留它的位置。下面的示例调用没有 age 参数的 studentInfo :
Call studentInfo("Mary", , #9/21/1981#)
通过名称传递参数
另一种方法是,可以通过名称传递参数(同样以逗号分隔)来调用 studentInfo 过程,如下例所示:
Call studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")
通过位置和通过名称混合参数
在单个过程调用中,可以同时通过位置和通过名称提供参数,如下例所示:
Call studentInfo("Mary", birth:=#9/21/1981#)
在前面的示例中,由于 birth 是通过名称传递的,所以没有必要用额外的逗号来保留省略的 age 参数的位置。
如果同时通过位置和通过名称提供参数,定位参数都必须放在前面。通过名称提供了一个参数后,其余的参数必须都通过名称提供。
通过名称提供可选参数
当调用包含一个以上可选参数的过程时,通过名称传递参数尤其有用。如果通过名称提供参数,则不必用连续的逗号表示缺少的定位参数。通过名称传递参数也使跟踪正在传递和省略的参数变得更容易。
通过名称提供参数方面的限制
通过名称传递参数不能避免输入必需的参数。只能省略可选参数。
不能通过名称传递参数数组。这是因为当调用过程时,为参数数组提供的参数数量不确定且以逗号分隔,而编译器无法将多个参数与单个名称关联。