Sub 语句

声明构成 Sub过程主体的名称、参数和代码。

语法

[ 专用 | 公共 | 好友 ][ 静态 ] 名称 [ ( arglist ) ]
[ 语句 ]
[ Exit Sub ]
[ 语句 ]
End Sub

Sub 语句语法包含以下部分:

Part 说明
Public 可选。 指示 Sub 过程对所有模块中的过程是可访问的。 如果在包括 Option Private 语句的模块中使用,则此过程在项目外部不可用。
Private 可选。 指示 Sub 过程仅对声明此过程的模块中的其他过程是可访问的。
Friend 可选。 仅在类模块中使用。 指示 Sub 过程在整个项目中是可见的,但对对象的实例的控制器不可见。
Static 可选。 指示在调用之间保留 Sub 过程的局部变量Static 属性不会影响在 Sub 外部声明的变量(即使在此过程中使用这些变量)。
名称 必填。 Sub 的名称;遵循标准的变量命名约定。
阿格列斯 可选。 表示在调用 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 不能与 ByValByRefOptional 一起使用。
varname 必填。 表示参数的变量的名称;遵循标准变量命名约定。
type 可选。 传递给过程的参数的数据类型;可以是 ByteBooleanIntegerLongCurrencySingleDoubleDecimal(当前不支持)、DateString(仅可变长度)、ObjectVariant 或特定对象类型。 如果参数不是 Optional,则还可以指定用户定义类型
defaultvalue 可选。 任意常量或常量表达式。 仅对 Optional 参数有效。 如果类型是一个 Object,则显式默认值只能为 Nothing

备注

如果未使用 PublicPrivateFriend 显式指定, 则 Sub 过程默认为公共过程。

如果未使用 Static ,则不会在调用之间保留局部变量的值。

Friend 关键字只能用于类模块。 但是,项目的任何模块中的过程均可以访问 Friend 过程。 Friend 过程既不会显示在其父类的类型库中,也不会成为稍后可绑定的 Friend 过程。

Sub 过程可能是递归的;即,它们可调用自身来执行给定任务。 但是,递归可能导致堆栈溢出。 Static 关键字通常不与递归 Sub 过程一起使用。

所有可执行代码必须在过程中。 不能在另一个 SubFunctionProperty 过程中定义 Sub 过程。

Exit Sub 关键字可导致立即退出 Sub 过程。 程序将继续执行调用 Sub 过程的语句后面的语句。 任意数目的 Exit Sub 语句可出现在 Sub 过程中的任意位置。

Function 过程一样,Sub 过程是一个单独的过程,可接受参数、执行一系列语句以及更改参数的值。 但是,与可以返回值的 Function 过程不同的是,Sub 过程不能在表达式中使用。

通过使用过程名称后跟参数列表来调用 Sub 过程。 有关如何调用 Sub 过程的具体信息,请参阅 Call 语句。

Sub 过程中使用的变量可分为两类:在过程中显式声明的变量和未显式声明的变量。 在过程中显式声明的变量(使用 Dim 或等同项)始终是过程内的局部变量。 在过程中使用但未显式声明的变量依然是局部变量,除非在过程外某些更高级别显式声明这些变量。

过程可使用未在过程中显式声明的变量,但如果您在模块级别定义了使用相同名称的变量,则会发生命名冲突。 如果您的过程引用使用与其他过程、常量或变量名称相同的未声明变量,则假定您的过程引用的是该模块级别的名称。 为了避免此类冲突,请显式声明变量。 使用 Option Explicit 语句强制显式声明变量。

注意

不能使用 GoSubGoToReturn 进入或退出 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。