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
```vbnetPublic Function test2(n) '设立参数nDim i, jFor i = 1 To n '此处看函数调用方赋值情况j = j + Cells(i, 1)Nexttest2 = jEnd 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, jFor i = 1 To nj = j + Cells(i, 1)Nexttest2 = 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. 默认参数应排在可选参数的后面```vbnetFunction TestSub1(rng, Optional ftype = 1) 'ftype就是一个默认值为1的参数passEnd 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 ```
