过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。

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…