-
]Sub
过程的详细解释
语法
[Private |
Public | Friend] [Static] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
*
用
[]
符号括起来的选项是可选的。
前面这
3
个
[Private | Public | Friend]
是
同作用范围有关的。
Private
表示私有,即是这个过程<
/p>
只能从本模块里面调用。使用了这个的话,你从菜单
工具
宏
宏
...
里看不到这个过程。
Pu
blic
表示公用,这样你从其它的模块也可以访问这个公用过程。如果前面没有任何<
/p>
[Private
|
Public
| Friend]
的话,
过程默认是公用的。
公用的过程可以从菜单
工具
<
/p>
宏
宏
...
p>
里看得到。
Friend
是用在类模块里面
的,比较少用,就不说了。
Sta
tic
是静态的意思,你可能还记得用
Static
声明静态变量,用它声明过程的话,表示这个
过程里面声明的局部变量在下
次调用这个过程时仍然保持它的值。
下面是
Static
声明过程的用法
.
运行
try1
过程,然后可以在立
即窗口里看到结果。
Static
Sub m1()
Dim i As Integer
Dim j As Integer
i =
i + 1
j = j + 1
End Sub
Private Sub m2()
Dim i As Integer
Dim
j As Integer
i = i + 1
j =
j + 1
End Sub
Sub try1()
Dim i
As Integer
静态过程
:
For i = 1 To 10
Call m1
Next i
私有过程
:
For i = 1 To 10
Call m2
Next i
End Sub
如果没有使用
Public
、
Private
或
Friend
显式指定,
Sub
过程按缺省情况就
是公用的。如
果没有使用
Stati
c
,
则在调用之后不会保留局部变量的值。
Friend
关键字只能在类模块中使用。
不过
Friend
过程可以被工程的任何模块中的过程访问。
Friend
过程不会在其父类的类型库中
出现,且
Friend
过程不能被后期绑定。
小心
Sub
过程可以是递归的;也就是说,该过程可以调用自己来
完成某个特定的任务。
不过,递归可能会导致堆栈上溢。通常
Static
关键字和递归的
Sub
过程不在一起使用。
所有的可执行代码都必须属于某个过程。不能在别的
Sub
、
Function
或
Property
过程中
定义
Sub
过程。
Exit Sub
语句使执行立即从一个
Sub
过程中退出。程序接着从调用该
Sub
过程的语句下
一条语句执行。在
Sub
过程的任何位置都可以有
Exit Sub
语句。
Sub
过程与
Function
过程的相似之处是:它们都一个可以获取参数,执行一系列语句,
以及改
变其参数的值的独立过程。而与
Function
过程不同的是:带返回值的
Sub
过程不能用
于表达式。
可以使用过程名并后跟相应的参数列表来调用一个
Sub
过程。
请参阅
Call
语句关于如何
调用
Sub
过程的详细的说明信息。
在
Sub
过程中使用的变量分为两类:一类是在过程内显式定义的,另一类则不是。在过
程内显式定义的变量(使用
Dim
或等效方法)都是局部变量。对于使用了但又没有在过程中
显式定义的变
量,除非其在该过程外更高级别的位置有显示地定义,否则也是局部的。
小心
过程
可以使用没有在过程内显式定义的变量,
但只要有任何在模块级别定义的名称与
之同名,就会产生名称冲突。如果过程中使用的未定义的变量与别的过程,常数,或变量的名
p>
称相同,则认为过程使用的是模块级的名称。显式定义变量就可以避免这类冲突。可以使用<
/p>
Option Explicit
语句来强制显式定义变量。
注意
不能使用
GoSub
、
GoTo
或
Return
来进入或退出
Sub
过程。
现在说说
arglist,
它的语法如下:
[Optional] [ByVal | ByRef] [ParamArray]
varname[( )] [As type] [= defaultvalue]
先说
Optional
,
Optional
表示这个参数是可选的,
意思是在调用过程时可以不传递值也可以
传递值给这个参数
.
如果有给出
defaultvalue
给这个参数时
(
如
o
ptional iInput2 As Integer=13),
当
调用过程没有传递值给这个参数时
,
过程里面会默认使用这个
defaultvalue.
Optional
必须对最后面的那些参数使用
,
也就是说这个参数用了
Optional
< br>后
,
后面的参数就必
须也使用<
/p>
Optional.