1.函数过程

函数过程都以Function开头,一般都含有参数

1.1 函数过程的特点

  1. 函数过程可以返回值,一般通过给函数名赋值的方式;
  2. 函数过程可以有参数,也可以没有参数;
  3. 在不返回值和参数的情况下,函数过程和一般子过程没有任何区别;
  4. 函数过程不仅vba的其他过程能够调用,也可以直接在工作表单元格中使用; ```vbnet Public Function test2()

    Dim i, j For i = 1 To 10

    1. j = j + Cells(i, 1)

    Next

    test2 = j ‘通过给函数名赋值的方式让函数具有返回值,此处test2代表函数名称的变量

End Function


Public Sub test1() MsgBox test2 ‘此处test2不是一个变量,时代表的函数,会返回test2函数的返回值 End Sub

  1. ```vbnet
  2. Public Function test2(n) '设立参数n
  3. Dim i, j
  4. For i = 1 To n '此处看函数调用方赋值情况
  5. j = j + Cells(i, 1)
  6. Next
  7. test2 = j
  8. End Function
  9. ----------------------------------------
  10. Public Sub test1()
  11. MsgBox test2(3) '含有参数的函数被调用时,必须带上参数值
  12. End Sub

image.png

1.2 函数过程的调用方式

  1. 直接用函数名调用,对于含有参数的函数时,参数的括号可以加也可以不加;
  2. call **函数名**调用。用此种方式调用时,对于有参数的函数需要带上参数;
  3. 可以用Application.Run **函数名字符串**的方式调用函数 ```vbnet Public Function test1()

    Dim i, j For i = 1 To 10

    1. j = j + Cells(i, 1)

    Next

    test2 = j ‘通过给函数名赋值的方式让函数具有返回值,此处test2代表函数名称的变量

End Function

Public Function test2(n)

  1. Dim i, j
  2. For i = 1 To n
  3. j = j + Cells(i, 1)
  4. Next
  5. 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函数

  1. <a name="o3Eym"></a>
  2. ## 1.3 函数过程的参数
  3. <a name="zLGhV"></a>
  4. ### 1.3.1 默认参数
  5. 1. 默认参数是如果不进行函数参数输入时的默认值,`Optional 参数名 = 默认值`
  6. 2. 默认参数应排在可选参数的后面
  7. ```vbnet
  8. Function TestSub1(rng, Optional ftype = 1) 'ftype就是一个默认值为1的参数
  9. pass
  10. End Function

1.3.2 参数数组

  1. 参数数组解决来源个数不定的问题,ParamArray arr() As Variant
  2. 若有固定参数或默认参数,需要放在其前面 ```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 ```