过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。
VBA具有四种过程:Sub 过程、Function函数、Property属性过程和Event事件过程。
1、Sub过程总是以“sub 过程名()”开头,以“End Sub”结尾,Sub过程不返回运行的结果。
格式如下:
Sub 过程名()
代码 ' 需要在过程中执行的代码
End Sub
过程名后面的括号是必须的,过程可以带参数,就放置在括号里面
Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:
Sub password (ByVal x as integer, ByRef y as integer)
If y=100 then y=x+y else y=x-y
x=x+100
End sub
Sub call_password ()
Dim x1 as integer
Dim y1 as integer
x1=12
y1=100
Callpassword(x1,y1) ‘调用过程方式:1.Call 过程名(参数1, 参数2…);2. 过程名 参数1, 参数2…
debug.print x1,y1 ‘结果是12、112,y1按地址传递改变了值,而x1按值传递,未改变原值
End sub
2、Function总是以“Function 程序名()”开头,以“End Function”结尾,和Sub过程的区别是Function过程可以返回程序运行的值。
Function过程也就是我们说的自定义函数。参数传递也两种:按值传递(ByVal)和按地址传递(ByRef)。
格式如下:
Function 函数名(参数1, 参数2, ...) As 数据类型
' 需要在函数中执行的代码
函数名 = 函数执行后的结果 ' 设置返回值
End Function
函数名后面的括号是必须的,函数通常都带有参数,放置在括号里面。函数也可以不带参数,但这种情况下的函数通常没什么意义。
括号后面的 As 数据类型代表返回值的数据类型,不是必须的。
函数体最后通常都带有一条返回值语句,把函数执行的结果赋值给函数名,就可以在调用这个函数的地方得到这个函数的执行结果。这个返回结果的数据类型应该与函数名后面As的数据类型一致,否则可能会出错。
函数示例:
Function mysum(n1 as Integer, n2 as Integer) As Integer
Dim s As Integer
s = n1 + n2
mysum = s
End Function
上例中定义了一个名为mysum的函数,它接受两个类型为Integer的参数,并且返回值是Integer类型。在函数内部计算了这两个参数相加的和,并把这个和作为返回值赋给mysum。可以通过调用这个函数,并传递相应的参数,获得它的返回值。
3.过程的调用
调用过程方式:
1.Call 过程名(参数1, 参数2…);
2. 过程名 参数1, 参数2…