函数是完成某一功能的程序代码段,又称程序模块。该段程序代码以一定格式实现并通 过函数名来调用。编写函数的目的是便于维护,避免代码重复编写,提高程序设计效率。
一般来说,函数是有返回值的,函数的返回值即函数执行的结果。实际上,过程也是函 数,只是没有返回值的函数;所谓方法,是存在于某个对象中的函数或过程。
函数分为系统函数和自定义函数。系统函数是 VB 提供的内部函数,可以直接通过函数名 调用,如 MsgBox()函数、Len()函数等。自定义函数是用户自己设计的函数。
2.6.1 自定义函数
格式:[作用范围关键字] Function 函数名(参数列表)As 返回值类型 代码段
[Exit Function]
函数名=返回结果 End Function 说明:
l 关键字 Function…End Function:函数的定义结构。
l 作用范围关键字:使用 Public 或 Private 关键字,指定该函数是在本模块使用还是可 以被其他模块使用,含义与变量作用范围中说明的相同,不指明作用范围时,默认是 使用 Public 关键字。但不能使用 Dim 关键字。
l 参数:需要传递到函数中处理的数据,多个参数以逗号分隔;调用函数时,传递给函 数的参数必须和函数定义时的个数、位置和类型一致。
l 函数返回值: 通过对函数名赋值方式返回调用函数的结果, 返回值必须与函数定义时 的数据类型一致,函数只能通过函数名返回一个值,不能返回多个值。
例 238 定义一个名为 Add 的函数,实现任意两个整数相加,并返回相加的结果。
【程序代码】
'函数的定义
Private Function Add(ByVal x As Integer, ByVal y As Integer) As Integer Dim Sum As Integer
Sum = x + y Add = Sum End Function '函数的使用
Private Sub Command1_Click() Dim Sum As Integer
Sum = Add(1, 2)
MsgBox ("计算结果是:" & Sum) End Sub
2.6.2 自定义过程
过程分为事件过程和自定义过程。事件过程是在对象上触发某个事件时,系统自动调用 的过程。程序设计中接触最多的是命令按钮的 Click 事件过程,本章大部分例子都通过命令按 钮的事件过程来说明。
过程名可以自定义。VB 中对象的事件过程按“对象名_事件名”格式自动命名,表示在 什么对象上发生什么事件时,调用该过程。
格式:Sub 过程名(参数列表) 代码段
[Exit Sub]
End Sub
说明:过程不能有返回值。
例 239 编写一个 MyMsg 过程,模拟 MsgBox 函数的功能。
【程序代码】
'自定义过程
Sub MyMsg(ByVal msg As String) MsgBox (msg)
End Sub '过程的使用
Private Sub Command1_Click() MyMsg ("这是 MyMsg 过程") End Sub
2.6.3 参数传递
函数参数(包括过程参数)的传递方式有两种:值传递和引用传递。
一般,函数的参数称为形式参数,实际传递给函数参数的数据称为实际参数。实际参数 可以是变量或常量。
所谓值传递(ByVal),是在调用函数时,把实际参数的值传递给函数对应的形式参数;
所谓引用传递(ByRef) ,是在调用函数时,形式参数对应实际参数的内存地址。因此,引用 传递实际参数必须是变量。
两种传递方式的最大区别:引用传递可以改变实际参数的值,值传递不影响实际参数的 值。在例 240 中可以看出两者之间的差别。
例 240 值传递与引用传递的区别。
【程序代码】
'形式参数为值传递,使用关键字 ByVal 进行说明 Sub Testval(ByVal x As Integer)
x = x + 10 End Sub
'形式参数为值传递,使用关键字 ByRef 进行说明 Sub TestRef(ByRef x As Integer)
x = x + 10 End Sub
'在窗体上添加按钮 Button1 Private Sub command1_click()
Dim m As Integer m = 10
Testval m
MsgBox ("传值调用的结果是:" & m) '结果为 10,m 的值没有改变 m = 10
TestRef m
MsgBox ("传地址调用的结果是:" & m) '结果为 20,m 的值在 TestRef 中被改变了 End Sub
【运行结果】
如图 234 所示。
图 234 运行结果
说明:过程调用时,参数不能使用括号,否则将可能无法得到正确结果;如果要使用括 号,必须使用 Call 关键字,如:Call TestRef(m)。
2.6.4 使用可选的参数
在过程的参数列表中列入 Optional 关键字,可以指定过程的参数为可选,如果指定了可 选参数, 则参数表中该参数后面的其他参数也必须是可选的, 并且要用 Optional 关键字声明。
可选参数也可以指定默认值。
以下代码中,自定义过程 MyMsg 具有可选参数并指定了默认值,如果调用该过程时带参 数,则显示参数的值;如果不带参数,则显示默认值。
Sub MyMsg(Optional ByVal msg As String = "abc") MsgBox msg
End Sub
Private Sub Command1_Click() MyMsg
MsgBox "OK"
End Sub