通用过程中包括sub子程序过程和Function函数过程,前面介绍了sub过程的定义、调用、参数的传递方式等。Function函数过程与sub过程类似,但也有所不同。本节开始就介绍下Function函数过程。
一、Function函数和Sub过程异同
1、相同点:
1、都是构成VBA程序的基本单位
2、都可以用Public和Private等关键字设置过程的作用区域。
3、都可以接收参数,参数的设置相同。(包括传递方式,可选参数,可变参数等)
前面介绍的传递方式,可选参数,可变参数在Function函数过程中均适用。
2、不同点:
1、Sub过程不能返回一个值,而Function函数可以返回一个值,因此Function函数过程可以像Excel内部函数一样在表达式中使用。
2、Sub过程可以作为宏来调用,而Function函数过程不会出现在调用宏时选择宏的对话框中,要在工作表中调用Function函数,可像使用Excel内部函数一样使用。
3、在vba中,Sub过程可以作为独立的基本语句调用,而Function函数通常作为表达式的一部分。
二、定义Function函数
Function函数过程的创建方法与Sub过程方法类似,在使用Function函数时,一般需要使用一个变量来接收返回值。
创建函数通常都使用直接手工输入,在手工输入时需要了解Function函数过程的结构,其语法格式如下。
[ Private |Public|Friend ] [Static] Function 函数名 [(参数列表) ] [As 返回类型]
语句序列1
函数名=表达式1
Exit Function
语句序列2
函数名=表达式2
End Function
它的语法结构和Sub过程相近,主要有两点不同:1、声明函数名的第一行使用"As 返回类型"定义函数返回值。2、在函数过程内,通过给函数名赋值来返回计算结果。如果函数结构中没有函数名=表达式1的语句,则该函数使用时会返回一个默认值,数值函数返回值为0,字符串函数返回值为空字符串。
通常不使用sub过程来返回值,但在介绍Sub过程中使用传地址方式传递参数时,可以通过变量来得到结果。当时的演示例图如下:
通过传地址方式传递参数,调用jisuan过程,变量b的值改变。下面通过Function函数过程来实现下,更加方便。
在代码中创建Function函数过程 jisuan,jisuan函数过程返回值定义了类型为As integer,函数过程中定义了整型变量i。jisuan的过程只是简单的变量 1后的结果。
新建一个sub过程,定义变量h为integer整型变量,调用函数过程,与调用其他内置函数类似,通过h = jisuan(2)即可,得到计算后的结果为3,赋值给h。
通过两者对比,来理解Function函数过程和sub过程的异同和使用方法。
三、调用Function函数
有两种方法调用Function函数,一种是在工作表的公式中使用,即像普通Excel函数一样使用。另一种是从VBA的另一个过程里调用。
1、在工作表中调用函数
定义的Function函数和系统内置函数一样,可以再Excel工作表中作为公式进行引用。(即和常用的sum函数、if函数、vlookup函数等一样去使用。
下面通过示例介绍,先创建一个名为jisuan的函数过程。
根据定义的语法结构,创建了名为jisuan的函数,函数有一个参数为i是整型变量。然后声明返回值为As integer整型变量。
然后函数过程中表达式要书写成函数名称jisuan=i 1,即提供的变量i加上1之后的值作为返回值。
下一步在excel工作表中,像平常的函数一样去调用创建的jisuan函数。
在公式中输入=jisuan(单元格引用)来计算前面的数字,结果都是 1之后的结果。(参数和返回值都是整型变量。)
这种方式也可以帮助更好的理解函数,理解之后可以针对需求创建复杂的函数。(特别是工作中一些数据的固定处理,就可以使用自定义的函数。)
2、在VBA代码中调用函数
在vba中,function函数过程无法像Sub过程那样按F5来调试运行。运行函数过程,需要从另一个函数过程中来调用该函数。
function函数过程的调用比较简单,就像使用vba内部函数一样来调用function函数过程。只不过内部函数是有vba系统提供的。而function函数是由用户自定义的。
新建一个sub过程,定义变量h为integer整型变量,调用函数过程,与调用其他内置函数类似,通过h = jisuan(2)即可,得到计算后的结果为3,赋值给h,在立即窗口中显示。
今天下雨
本节主要介绍Function函数过程,重点是它和Sub子程序过程时使用时的异同之处。后面会通过示例来具体再介绍Function函数过程的使用,祝大家学习快乐。