在VBA中,可以自定义函数来执行特定的任务。这些自定义函数可以带有参数并返回一个值。
函数声明
自定义函数的声明需要使用 Function 关键字,后跟函数的名称以及括号中的参数列表。
Function MyFunctionName(parameter1 As DataType, parameter2 As DataType) As ReturnType
参数
函数可以包含零个或多个参数。每个参数都有一个名称和一个数据类型。这些参数用于传递数据给函数。参数列表需要用括号括起来。
返回值
函数可以返回一个值。要指定函数返回的数据类型,可以使用 As 关键字。例如,As Integer、As String、As Double 等。如果函数不返回任何值,则可以使用 Sub 关键字,而不是 Function 关键字。
函数体
函数体是函数的主体部分,其中包含实际执行的代码。这些代码可以执行各种操作,例如数学计算、字符串操作、条件判断等。函数体的开头和结尾分别用 Function 和 End Function 关键字标识。
返回值
在函数的代码中,使用赋值语句(=)将要返回的值赋给函数的名称。
MyFunctionName = some_value
调用函数
在VBA中,可以通过函数名称和适当的参数列表来调用函数。
result = MyFunctionName(argument1, argument2)
可选参数
VBA中的函数可以具有可选参数。可以在声明参数时使用 Optional 关键字,并为其提供默认值。
Function MyFunctionName(Optional parameter1 As DataType = default_value) As ReturnType
示例
Sub aa()
Dim arr()
arr = Array(534, 676, 8768, 99, 23, 45, 765, 85, 899, 8, 3)
brr = shuzusort(arr, 1)
For Each i In brr
Debug.Print i
Next
End Sub
Function shuzusort(ByVal arr, Optional ByVal moshi = 1)
xx = UBound(arr)
yy = LBound(arr)
If moshi = 0 Then
For i = yy To xx
For j = i + 1 To xx
If arr(i) < arr(j) Then
s = arr(j)
arr(j) = arr(i)
arr(i) = s
End If
Next
Next
Else
For i = yy To xx
For j = i + 1 To xx
If arr(i) > arr(j) Then
s = arr(j)
arr(j) = arr(i)
arr(i) = s
End If
Next
Next
End If
shuzusort = arr
End Function
这段VBA代码的功能是使用自定义函数对一个整数数组进行排序。
- Sub aa() 是一个主过程,它调用了函数 shuzusort 来对一个整数数组进行排序,并将排序后的结果打印输出。
- Function shuzusort(ByVal arr, Optional ByVal moshi = 1) 是一个用于排序的自定义函数。它接受两个参数:arr 是要排序的数组,moshi 是一个可选参数,用于指定排序的方式。默认情况下,moshi 的值为1,表示升序排序。
- xx = UBound(arr) 和 yy = LBound(arr) 用于获取数组 arr 的上界和下界。
- 如果 moshi = 0,则执行降序排序,否则执行升序排序。
- 接下来是嵌套的两个循环。外部循环变量 i 从数组的下界开始,直到上界为止。内部循环变量 j 从 i+1 开始,直到上界为止。
- 在每次循环中,比较 arr(i) 和 arr(j) 的值。如果满足排序条件,交换两个元素的位置。
- 交换两个元素的位置时,使用变量 s 来进行暂存。
- 最后,将排好序的数组作为函数的返回值。
数组排序的具体操作和过程,可通过以下链接查看。
数组的排序http://t.csdnimg.cn/AyK35
使用自定义函数可以使VBA代码更加模块化及可重复使用,同时提高代码的可读性和可维护性。