-
Sub 语句 (Visual Basic)
声明定义 Sub 过程的名称、参数和代码。
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
部件
术语 |
定义 |
attributelist |
可选。 请参见特性列表。 |
Partial |
可选。 指示分部方法的定义。 请参见分部方法 (Visual Basic)。 |
accessmodifier |
可选。 可以是如下内容之一:
请参见Visual Basic 中的访问级别。 |
proceduremodifiers |
可选。 可以是如下内容之一:
|
Shared |
可选。 请参见 Shared。 |
Shadows |
可选。 请参见 Shadows。 |
name |
必选。 过程名。 请参见已声明的元素名称 (Visual Basic)。 若要为类创建构造函数过程,请将 Sub 过程的名称设为 New 关键字。 有关更多信息,请参见 对象生存期:如何创建和销毁对象 (Visual Basic)。 |
typeparamlist |
可选。 泛型过程的类型参数的列表。 请参见类型列表。 |
parameterlist |
可选。 表示此过程的参数的局部变量名称的列表。 请参见参数列表 (Visual Basic)。 |
Implements |
可选。 指示此过程实现一个或多个 Sub 过程,每个过程在一个由此过程的包含类或结构实现的接口中定义。 请参见 Implements 语句。 |
implementslist |
如果提供了 Implements 则需要。 所实现的 Sub 过程的列表。 implementedprocedure [ , implementedprocedure ... ] 每个 implementedprocedure 均有下列语法和部分: interface.definedname
部分说明
interface 必选。此过程的包含类或结构所实现的接口的名称。
definedname 必选。interface 中定义该过程时使用的名称。
|
Handles |
可选。 指示此过程是否可以处理一个或多个特定事件。 请参见 Handles 子句 (Visual Basic)。 |
eventlist |
如果提供了 Handles 则需要。 此过程处理的事件的列表。 eventspecifier [ , eventspecifier ... ] 每个 eventspecifier 均有下列语法和部分: eventvariable.event
部分说明
eventvariable 必选。用引发该事件的类或结构的数据类型声明的对象变量。
event 必选。此过程处理的事件的名称。
|
statements |
可选。 要在此过程内运行的语句块。 |
End Sub |
终止此过程的定义。 |
备注
所有可执行代码都必须在过程内。 在不需要将值返回到调用代码的情况下可使用 Sub 过程。 在需要返回值时可使用 Function 过程。
仅可以在模块级别使用 Sub。 这意味着 Sub 过程的声明上下文必须是类、结构、模块或接口,并且不能是源文件、命名空间、过程或块。 有关更多信息,请参见 声明上下文和默认访问级别 (Visual Basic)。
Sub 过程默认为公共访问级别。 可以使用访问修饰符来调整它们的访问级别。
规则
- **实现。**如果此过程使用 Implements 关键字,则包含类或结构必须具有 Implements 语句,该语句紧跟在其 Class 或 Structure 语句之后。 Implements 语句必须包含在 implementslist 中指定的每个接口。 但是,接口在定义 Sub 时所用的名称(在 definedname 中)不必与此过程的名称(在 name 中)相同。
行为
-
**从过程中返回。**当 Sub 过程返回到调用代码时,将继续执行调用它的语句后的语句。
使用 Exit Sub 和 Return 语句可以立即从 Sub 过程中退出。 过程中的任何地方可以出现任意数量的 Exit Sub 和 Return 语句,而且可以混用 Exit Sub 和 Return 语句。
下面的示例显示从 Sub 过程返回的结果。
VBSub mySub(ByVal q As String) Return End Sub
-
**调用过程。**与 Function 过程一样,Sub 过程是采用参数和执行一系列语句的单独过程。 然而,与返回值的 Function 过程不同,Sub 过程不能在表达式中使用。
通过使用语句中的过程名(后跟圆括号中的参数列表)调用 Sub 过程。 只有在不提供任何参数时,才可以省略括号。 但是,如果始终包含括号,则代码的可读性更高。
也可以使用 Call 语句调用 Sub 过程。 这能够提高代码的可读性。
疑难解答
**执行的顺序。**Visual Basic 有时会重新排列算术表达式以提高内部效率。 因此,如果您的参数列表包括调用其他过程的表达式,您将无法依赖要按任何特定顺序调用的这些表达式。
示例
下面的示例使用 Sub 语句定义组成 Sub 过程体的名称、参数和代码。
Sub computeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub