通过位置和通过名称的参数传递

更新: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 参数的位置。

如果同时通过位置和通过名称提供参数,定位参数都必须放在前面。通过名称提供了一个参数后,其余的参数必须都通过名称提供。

通过名称提供可选参数

当调用包含一个以上可选参数的过程时,通过名称传递参数尤其有用。如果通过名称提供参数,则不必用连续的逗号表示缺少的定位参数。通过名称传递参数也使跟踪正在传递和省略的参数变得更容易。

通过名称提供参数方面的限制

通过名称传递参数不能避免输入必需的参数。只能省略可选参数。

不能通过名称传递参数数组。这是因为当调用过程时,为参数数组提供的参数数量不确定且以逗号分隔,而编译器无法将多个参数与单个名称关联。

请参见

任务

如何:将参数传递给过程

如何:按名称向过程传递参数

概念

Visual Basic 中的过程

过程参数和变量

通过值和通过引用传递参数

可选参数

参数数组

参考

Optional (Visual Basic)

ParamArray