VBA 函数

其它语言中,方法根据返回值分:有返回值、无返回值(void)。

VBA中,将无返回值的称之为过程Sub、有返回值的称为函数Function。


为什么需要返回值?

以求和为例。

Sub sum1(a As Integer, b As Integer)
  Dim c As Integer
  c = a + b
  Debug.Print "sum:" & c
End Sub

Sub sum1_call()
  '调用过程
   sum1 20, 23      '输出43
   Call sum1(20, 6)   '输出26
End Sub

上面的代码中,sum1_call调用了sum1,sum1把和打印出来。

假设现在有需求,要在sum1_call获取和,拿到和自己做进一步处理,sum1你也不用管我sum1_call要做什么处理,反正我要拿到和。

就像张三喊李四打印文件,李四要把文件交回给张三,就相当于返回值,张三可能要对文件做进一步的批示。总之:李四不要管张三拿去做什么。


函数的使用步骤

函数的使用步骤与过程完全相同:1)定义函数;2)调用函数。

函数与过程的不同:

1)定义不同。函数声明返回值类型,在函数体中需返回相应的值;

2)调用的地方可以通过变量来接收返回值。


函数定义语法

Function 函数名(参数列表) As 返回类型
     语句块
     函数名 = 返回值
End Function

函数的定义以Function开头,以End Function结尾。

函数列表后需 As 返回类型来声明返回的数据类型。

返回值通过 函数名 = 返回值 进行返回,类似其它语言中的return。


示例:声明求和函数,返回求和结果。

Function sum8(a As Integer, b As Integer) As Integer
  Debug.Print "调用sum8"
  sum8 = a + b
End Function

As Integer 返回类型为Integer。

sum8 = a+b 设置返回值,此处的sum8与函数名称一致。

返回值的类型与声明类型需要一致,这里都是Integer。


函数的调用

函数名(实参1,实参2…)

函数名之后使用一对小括号( )把所有参数括起来。


经常会用变量来接收函数的返回值,或者作为表达式的操作数或者函数参数。

变量名 = 函数名(实参1,实参2…)

示例,调用上述sum8。

Sub sum8_call()
  Dim c As Integer
  '调用函数,获取返回值
  c = sum8(20, 23)
  Debug.Print "c:" & c
End Sub

sum8_call获取到了sum8计算并返回的数据,可以进一步根据需求进行处理。