Excel VBA之第二十五课
又是美好的一天,我们继续前行,上次课我们学习了过程的基础知识,形参与实参,今天我们来学习过程基础之地址传递和值传递。
1、地址传递
按地址传递参数就是将实参的地址给相应的实参,就好像你把自己家的地址给了人家,人家就可以随便找到你家,然后改变你家里的物品(或添置或拿走),此时形式参数与实际参数使用相同的内存地址单元,这样通过调用被调程序可以改变实参的值。系统缺省参数传递方式是按地址传递。有两种格式:
(1)、Sub 过程名(ByRef i%, ByRef sr$)
(2)、Sub 过程名(i%,sr$)
还记得上节课的例子嘛:
运行过程“实参示例”,得到如下结果:
为什么结果的i和sr的结果变化了?现在我们知道了“形参示例”中的参数是地址传递的,在被调用之后它把i和sr的原始值给改变了。如果我们写成这样:Sub形参示例(ByRef i%, ByRef sr$),得到的结果也是一样的。
2、值传递
值传递是指形参在接受实参时,接受的是实参的实际值,而非实参的地址,实参是不受任何影响的,如果过程定义形参时使用了ByVal关键字,此时实参与形参之间就是值传递方式。语法格式如下:
Sub 过程名(ByVal i%, ByVal sr$)
示例:
结果:
看,在这段代码中,虽然“形参示例”被调用了,但由于它是值传递方式,故无论怎么折腾,它都不会对i和sr任何影响!
那么VBA为什么要有这么样的功能呢?直接统一按照值传递,互不影响不就好了,还这么麻烦,这是一位网友问我的。我只能说,萝卜青菜,各有所爱,有的程序需要这样或那样的传递方式。我们还是默默接受吧~
赞 (0)