
ExcelVBA入门过程和函数.doc
5页ExcelVBA入门(六)过程和函数前面讲过,VBA代码有两种组织形式,一种就是过程(前面的示例中都在使用),另一种就是函数其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是:•函数有返回值,过程没有•函数可以在Exce表格中像一般的Exce函数那样使用,但过程不可以*过程可以指定给Exce表格中的按钮或者图片等对象,但是函数不可以•函数只能在被调用时执行,比如在过程中调用,或者在另一个函数中调用,或者在Exce表格中调用但不能直接执行,而过程是可以的虽然可以把所有代码都放在一个过程,或者一个函数里面,但是这样会使代码难以维护,特别是非常不便于其他人查看修改而有时一些重复性的代码,也应该把它们独立出去,作为一个子过程或子函数来组织使用子过程和子函数的目的,就是为了便于组织代码、便于维护1.过程Sub过程以开头,E结束,过程中需要执行的代码放在中间格式如下:过程名需要在过程中执行的代码E过程名后面的括号是必须的,过程可以带参数,就放置在括号里面,稍后会有说明过程示例:eeellE函数c与过程类似,函数的格式如下:c函数名参数参数数据类型A需要在'函数中执行的代码函数名=函数执行后的结果EndFunction函数名后面的括号是必须的,函数通常都带有参数,放置在括号里面。
函数也可以不带参数括号后面的A数据类型虽然并不是必须的,但是我强烈建议加上因为函数通常都需要有返回值,这个数据类型就表示着返回值的数据类型函数体最后通常都带有一条返回值语句,把函数执行的结果赋值给函数名,就可以在调用这个函数的地方得到这个函数的执行结果这个返回结果的数据类型应该与函数名后面A的数据类型一致,否则可能会出错函数示例:Functionmy_sum(n1asInteger,n2asInteger)AsIntegerDimsAsIntegerEndFunction上例中定义了一个名为的函数,它接受两个类型为的参数,并且返回值是类型在函数内部计算了这两个参数相加的和,并把这个和作为返回值赋给可以通过调用这个函数,并传递相应的参数,获得它的返回值定义函数后,就可以在VBA中的过程,或者其它函数,或者在Exce表格中使用这个函数了在Exce表格中使用:ECE在VBA过程中使用:再次强调,函数是不能直接执行的上例中,如果试图把鼠标光标放在my_sum函数中,再按F8,或者点击工具栏中的执行按钮,都不会执行这个函数,而是会弹出一个运行宏的选择对话框,而在这个对话框中,是没有任何函数可供选择的,只有过程:I宏X宏名稀吧:湍过程和函数的调用□前面说过,过程和函数,都可以是被相互调用的。
1过程的调用格式1:Call过程名格式2:Call过程名(参数1,参数2,...)如果过程不带参数,那么可以使用第1种格式,过程名后面不需要括号如果过程带有参数,则要按照参数的顺序依次把参数写到过程名后面的括号中即使用第2种格式3.2函数的调用函数的调用在本章第2节中有示例函数的调用通常会在调用时把其赋值给一个变量,以获取函数返回值Subtest()DimsAsIntegers=my_sum(5,5)Debug.PrintsEndSubFunctionmy_sum(n1AsInteger,n2AsInteger)AsIntegerDimsAsIntegers=n1+n2my_sum=sEndFunction这里应该提出的是,函数应当要有返回值的,因为如果不需要返回值,那就应该直接使用过程而不是函数了4.参数的使用参数和使用对于过程和函数都是一样的所以本节的内容对过程和函数都适用参数可分为可选参数和必选参数两种必选参数在调用(过程或函数时)必须加上,否则会报错可选参数则可写可不写默认是必选参数,可选参数在定义时用OptionaI关键字声明,并且可选参数必须放在参数列表的最后面1必选参数必选参数在定义时放置在过程或函数名后面的括号中,格式为:参数名As参数类型如:Subsub_test(sAsString)Debug.PrintsEndSub在调用时,必须传入参数:Subtest()Callsub_test("hello")EndSub4.2可选参数格式与必选参数类似,只是在参数名前面用OptionaI声明参数是可选的。
Optional参数名As参数类型如:Subsub_test(OptionaIsAsString)Debug.PrintsEndSub在调用上述过程时,可以不传入参数,此时则不会输出任何东西,也不会报错,因为参数是可选的如果传入了参数,则会输出这个参数可选参数还可以设置默认值,即如果在调用时不显式传入这个参数的话,那么就使用定义时所使用的值如下过程:Subsub_test(OptionaIsAsString="HeIIo,WorId")Debug.PrintsEndSub带参数调用:Subtest()CaIIsub_test("Iamaboy")EndSub输出:Iamaboy不带参数调用:Subtest()CaIIsub_testEndSub输出:HeIIo,WorId4.3同时使用可选参数与必选参数此时可选参数必须放在最后Subsub_test(varAsInteger,OptionaIsAsString="HeIIo,WorId")Debug.PrintvarDebug.PrintsEndSub只传入必选参数:Subtest()CaIIsub_test(50)EndSub输出:50HeIIo,WorId同时传入可选参数与必选参数:Subtest()CaIIsub_test(50,"Hi,Meinv")EndSub输出:50Hi,Meinv本系列教程其它文章ExcelVBA入门(六)过程和函数。












