分享

Excel VBA之第二十五课

 计算机办公 2021-08-27

   又是美好的一天,我们继续前行,上次课我们学习了过程的基础知识,形参与实参,今天我们来学习过程基础之地址传递和值传递。

   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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多