1.函数过程
1.1 函数过程的特点
- 函数过程可以返回值,一般通过给函数名赋值的方式;
- 函数过程可以有参数,也可以没有参数;
- 在不返回值和参数的情况下,函数过程和一般子过程没有任何区别;
函数过程不仅vba的其他过程能够调用,也可以直接在工作表单元格中使用; ```vbnet Public Function test2()
Dim i, j For i = 1 To 10
j = j + Cells(i, 1)
Next
test2 = j ‘通过给函数名赋值的方式让函数具有返回值,此处test2代表函数名称的变量
End Function
Public Sub test1() MsgBox test2 ‘此处test2不是一个变量,时代表的函数,会返回test2函数的返回值 End Sub
```vbnet
Public Function test2(n) '设立参数n
Dim i, j
For i = 1 To n '此处看函数调用方赋值情况
j = j + Cells(i, 1)
Next
test2 = j
End Function
----------------------------------------
Public Sub test1()
MsgBox test2(3) '含有参数的函数被调用时,必须带上参数值
End Sub
1.2 函数过程的调用方式
- 直接用函数名调用,对于含有参数的函数时,参数的括号可以加也可以不加;
- 用
call **函数名**
调用。用此种方式调用时,对于有参数的函数需要带上参数; 可以用
Application.Run **函数名字符串**
的方式调用函数 ```vbnet Public Function test1()Dim i, j For i = 1 To 10
j = j + Cells(i, 1)
Next
test2 = j ‘通过给函数名赋值的方式让函数具有返回值,此处test2代表函数名称的变量
End Function
Public Function test2(n)
Dim i, j
For i = 1 To n
j = j + Cells(i, 1)
Next
test2 = j '通过给函数名赋值的方式让函数具有返回值,此处test2代表函数名称的变量
End Function
test1 test2 10 test2(10) call test1 call test2(10) Application.Run “test1” Application.Run [D1].value ‘若d1单元格内容为test1字符串,则也可以调用test1函数
<a name="o3Eym"></a>
## 1.3 函数过程的参数
<a name="zLGhV"></a>
### 1.3.1 默认参数
1. 默认参数是如果不进行函数参数输入时的默认值,`Optional 参数名 = 默认值`
2. 默认参数应排在可选参数的后面
```vbnet
Function TestSub1(rng, Optional ftype = 1) 'ftype就是一个默认值为1的参数
pass
End Function
1.3.2 参数数组
- 参数数组解决来源个数不定的问题,
ParamArray arr() As Variant
- 若有固定参数或默认参数,需要放在其前面 ```vbnet Public Function sum1(ParamArray arr() As Variant)
Dim e, r
For Each e In arr() If TypeName(e) Like “Range” Then For Each r In e Mysum = Mysum + r Next Else Mysum = Mysum + e End If Next
sum1 = Mysum ‘将结果赋值给函数作为函数的返回值
End Function ```