Function
声明用户定义函数过程的名称、参数和代码,这些代码构成函数的主体。
语法:[Public | Private] [Static] Function functionname [ ( [parameterlist] ) ] [ As type ] [ statements ] [ functionname = expression ] [ Exit Function ] [ statements ] [ functionname = expression ] End Function
Public : 可选。可选关键字,用于指定所有模块中的所有过程都可以访问该Function过程。
Private : 可选。可选关键字,用于指定只有声明该过程的模块中的其他过程才能访问该Function过程。
Static : 可选。可选关键字,用于指定Function过程中的所有局部变量的值在调用之间保持不变。
functionname : 必需。Function过程的名称;遵循标准变量命名约定。
parameterlist : 可选。代表在调用时要传递给Function过程的参数的变量列表,多个变量用逗号分隔。如果没有参数,则为空。
type : 可选。Function过程返回的数据类型;可以是Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal、Date、String、Object、Variant或用户定义类型。
statements : 可选。在Function过程中执行的任何语句组。
expression : 可选。函数的返回值。
使用Function语句创建函数过程。函数可以使用functionname = expression语法返回值,或者在函数体内使用Return语句。
函数过程的名称必须以字母开头,并且只能包含字母、数字和下划线字符。函数名称的最大长度为255个字符。
Function过程可以具有任意数量的参数,这些参数可以是必需或可选的。参数可以是任何数据类型,包括用户定义类型。
示例
此示例显示如何使用Function语句创建简单的函数。
Function AddNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
AddNumbers = num1 + num2
End Function
Sub TestAddNumbers()
Dim result As Integer
result = AddNumbers(5, 3)
MsgBox "结果是: " & result
End Sub使用可选参数
函数可以包含可选参数:
Function GreetUser(ByVal name As String, Optional ByVal greeting As String = "你好") As String
GreetUser = greeting & ", " & name
End Function
Sub TestGreetUser()
MsgBox GreetUser("张三") ' 输出: 你好, 张三
MsgBox GreetUser("李四", "欢迎") ' 输出: 欢迎, 李四
End Sub使用ByRef参数
默认情况下,参数通过引用传递(ByRef):
Function DoubleValue(ByRef value As Integer) As Integer
value = value * 2
DoubleValue = value
End Function
Sub TestDoubleValue()
Dim num As Integer
num = 5
MsgBox "原始值: " & num ' 输出: 5
Call DoubleValue(num)
MsgBox "调用函数后的值: " & num ' 输出: 10
End Sub返回数组
函数可以返回数组:
Function CreateArray() As Integer()
Dim arr(1 To 3) As Integer
arr(1) = 10
arr(2) = 20
arr(3) = 30
CreateArray = arr
End Function
Sub TestCreateArray()
Dim myArray() As Integer
myArray = CreateArray()
MsgBox "数组第一个元素: " & myArray(1)
End SubNOTE
函数名称用作返回值变量。在函数内为函数名称赋值会设置返回值。
使用Exit Function语句可以从函数中的任何位置退出函数。