所谓过程就是一段命名的程序代码,通过名字可以反复调用,从而增加程序的可读性和可维护性。从前面的例子我们已经看到,Visual Basic的程序运行都是由事件驱动来实现的,而事件驱动就是通过事件执行对应的事件过程。
Visual Basic除了事件过程外,还允许用户定义过程,称为通用过程。因此,本质上Visual
Basic的程序就是各种过程的集合。本节将介绍Visual Basic的通用过程(包括Function过程和Sub过程)和事件过程的定义、调用及其相关的问题。
在Visual Basic中使用下列几种过程:
⑴Sub过程(子程序)。
⑵Function过程(函数过程)。
⑶事件过程。
格式:
[Private|Public|Static]
Sub<过程名>[(形式参数表)]
过程语句
[Exit Sub]
End Sub
说明:
⑴[Private|Public|Static]可以定义Sub过程的作用范围。
⑵“过程名”是定义的Sub过程的名称,长度不超过255个字符。
⑶“形式参数表”列出调用Sub过程时传送的变量,多个参数之间用逗号隔开。格式为:
[ByVal
|ByRef]变量名[As数据类型]
其中,ByVal和ByRef用于指定参数传递的方式,其区别将在
⑷End Sub表明代码块的结束。每个Sub过程必须有一个End Sub语句。当程序执行到该语句时,退出过程,并立即返回到上一级调用该过程的语句处,继续执行下面的语句。
⑸Exit Sub语句用于强制退出过程。
例如:编写一个两个数交换的过程。
Private Sub Swap(x%, y%)
Dim temp
temp = x
x = y
y = temp
End Sub
此例中,Swap为过程名;x%, y%为形式参数。过程的作用是交换变量x和y的值。
调用Sub过程有两种方法:
方法一:使用CaII命令
格式:
Call <过程名> [(实际参数表)]
方法二:直接使用过程名调用
格式:
<过程名> [实际参数表]
说明:
⑴调用Sub过程时的参数称为实际参数,实际参数要与形式参数一一对应,即参数个数相同,数据类型一致。实际参数可以是变量也可以是具体的值。当实参为数组时,实参名后也要加一对括号。
⑵当使用Call语句时,参数必须在括号内,若省略Call关键字,则必须省略参数两边的括号,例如下列程序用来调用子程序并显示调用前后变量的不同结果。
Private Sub Form_Click()
Dim a%, b%
a = 10
b = 20
Print "过程调用前a="; a; "b = "; b
Call Swap(a, b) '或用Swap a, b表示调用过程
Print "过程调用后a="; a; "b = "; b
End Sub
调用语句常出现在主程序中,被调用的程序称为为子程序。上述程序运行过程如下:

程序执行步骤:
①先执行主程序中的命令语句。
②在主程序中遇到语句Call Swap(a, b),则调用子程序Swap,且主程序变量a, b的值传递给子程序中的变量x, y。
③执行子程序中的语句。
④子程序执行结束,返回主程序,且子程序变量x, y的值传递给主程序中的变量a, b。
⑤继续执行主程序中Call Swap(a, b)命令以后的语句。
格式:
[Private|Public|Static]
Function <函数名>([形式参数表])[As数据类型]
函数语句
[Exit
Function]
End Function
说明:
⑴函数的定义与Sub过程类似。Exit Function可以强制退出函数过程。
⑵函数过程有返回值,这个返回值依靠函数名传递。因此,函数名不仅可以标记函数,而且还用来传递函数的返回值。函数定义时需要有一个为函数名赋值的语句。
例如定义一个数学函数
Private
Function f(x as integer) as integer
f = 3 * x ^ 3 - 2 * x ^ 2 + 6 * x - 1
End Function
函数定义中,语句“f = 3 * x ^ 3 - 2 * x ^ 2 + 6 * x - 1”表示将求得表达式的结果赋值给函数名f,即调用函数时就可以将这个结果返回到调用语句。
格式:
<函数名> ([实际参数表])
说明:函数的调用格式同Visual Basic中内部函数的使用类似,例如f(x)为已经定义的求
a=f(10) '求x为10的表达式3 * 103- 2 * 102+ 6 * 10 – 1的值
b=f(10)+f(20) '求x分别为10和20的表达式的和
调用无参数函数时,括号不能省略。
Function函数过程调用的程序运行流程与Sub过程相同,先执行主程序中的语句;遇到函数调用语句则执行自定义函数过程,自定义函数过程执行结束后返回主程序并带回函数值;最后执行主程序余下的语句。
当调用Sub过程时,调用语句中的实际参数就与定义过程语句中的形式参数在个数位置上一一对应起来,并以某种方式传递数据,这个过程称为参数传递。在未出现过程调用时,形参并不占存储单元,只有在发生过程调用时,形参才被分配存储单元。在调用结束后,形参所占的存储单元被释放。上述程序中定义的函数及其参数传递情况如下:
函数定义语句:
Private
Function f (x As Integer) As Integer
…
End Sub

