过程(六)Function函数过程

2019-10-13 16:11:09 浏览数 (1)

通用过程中包括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函数过程的使用,祝大家学习快乐。


0 人点赞