Sub 语句
语法
[ 专用 | 公共 | 好友 ][ 静态 ] 子名称 [ ( arglist ) ]
[ 语句 ]
[ Exit Sub ]
[ 语句 ]
End Sub
Sub 语句语法包含以下部分:
Part | 说明 |
---|---|
Public | 可选。 指示 Sub 过程对所有模块中的过程是可访问的。 如果在包括 Option Private 语句的模块中使用,则此过程在项目外部不可用。 |
Private | 可选。 指示 Sub 过程仅对声明此过程的模块中的其他过程是可访问的。 |
Friend | 可选。 仅在类模块中使用。 指示 Sub 过程在整个项目中是可见的,但对对象的实例的控制器不可见。 |
Static | 可选。 指示在调用之间保留 Sub 过程的局部变量。 Static 属性不会影响在 Sub 外部声明的变量(即使在此过程中使用这些变量)。 |
名称 | 必填。 Sub 的名称;遵循标准的变量命名约定。 |
arglist | 可选。 表示在调用 Sub 过程时传递给它的参数的变量列表。 多个变量之间使用逗号分隔。 |
statements | 可选。 任意一组可在 Sub 过程中执行的语句。 |
arglist 参数包含以下语法和部分:
[ 可选 ][ ByVal | ByRef ][ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]
Part | 说明 |
---|---|
可选 | 可选。 一个指示参数是非必需的关键字。 如果使用,arglist 中的所有后续参数也必须是可选的,并使用 Optional 关键字 (keyword) 进行声明。 如果使用了 ParamArray,则不能将 Optional 用于任何参数。 |
ByVal | 可选。 指示按值传递参数。 |
ByRef | 可选。 指示按引用传递参数。 ByRef 是 VBA 中的默认值,与 Visual Basic .NET 中不同。 |
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。 |
备注
如果未使用 Public、 Private 或 Friend 显式指定, 则 Sub 过程默认为公共过程。
如果未使用 Static ,则不会在调用之间保留局部变量的值。
Friend 关键字只能用于类模块。 但是,项目的任何模块中的过程均可以访问 Friend 过程。 Friend 过程既不会显示在其父类的类型库中,也不会成为稍后可绑定的 Friend 过程。
Sub 过程可能是递归的;即,它们可调用自身来执行给定任务。 但是,递归可能导致堆栈溢出。 Static 关键字通常不与递归 Sub 过程一起使用。
所有可执行代码必须在过程中。 不能在另一个 Sub、Function 或 Property 过程中定义 Sub 过程。
Exit Sub 关键字可导致立即退出 Sub 过程。 程序将继续执行调用 Sub 过程的语句后面的语句。 任意数目的 Exit Sub 语句可出现在 Sub 过程中的任意位置。
与 Function 过程一样,Sub 过程是一个单独的过程,可接受参数、执行一系列语句以及更改参数的值。 但是,与可以返回值的 Function 过程不同的是,Sub 过程不能在表达式中使用。
通过使用过程名称后跟参数列表来调用 Sub 过程。 有关如何调用 Sub 过程的具体信息,请参阅 Call 语句。
在 Sub 过程中使用的变量可分为两类:在过程中显式声明的变量和未显式声明的变量。 在过程中显式声明的变量(使用 Dim 或等同项)始终是过程内的局部变量。 在过程中使用但未显式声明的变量依然是局部变量,除非在过程外某些更高级别显式声明这些变量。
过程可使用未在过程中显式声明的变量,但如果您在模块级别定义了使用相同名称的变量,则会发生命名冲突。 如果您的过程引用使用与其他过程、常量或变量名称相同的未声明变量,则假定您的过程引用的是该模块级别的名称。 为了避免此类冲突,请显式声明变量。 使用 Option Explicit 语句强制显式声明变量。
注意
不能使用 GoSub、GoTo 或 Return 进入或退出 Sub 过程。
示例
此示例使用 Sub 语句定义构成 Sub 过程的主体的名称、参数和代码。
' Sub procedure definition.
' Sub procedure with two arguments.
Sub SubComputeArea(Length, TheWidth)
Dim Area As Double ' Declare local variable.
If Length = 0 Or TheWidth = 0 Then
' If either argument = 0.
Exit Sub ' Exit Sub immediately.
End If
Area = Length * TheWidth ' Calculate area of rectangle.
Debug.Print Area ' Print Area to Debug window.
End Sub
另请参阅
支持和反馈
有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。