Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1479|回复: 1

[分享] 关于Byral/byref 传递的共享

[复制链接]
发表于 2012-6-1 09:36 | 显示全部楼层 |阅读模式
vba 传递参数值时,分为Byval 和Byref
参数分为形参和实参,
形参指的是过程名称中用括号括起来的参数,
实参指的的是调用过程中,向过程传递的数据参数。
可以理解为:形参相当于公式中的自变量,实参相当于使用公式时代入自变量中的具体数值。




Byref,地址传递参数,传递的是地址,过程操作的是变量的地址
Byval,值传递参数,将变量的内容复制了一遍,过程操作的是另外一个变量,只不过这两个变量名称一样,值一样


Vba中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用同一个数值。

Dim A as integer,B as integer
A=1
B=2
Call AAA(A,B)
Print A,B  
Call BBB(A,B)
Pring A,B  

sub BBB(Byref A,Byref B)
A=A+1
B=B+1
end sub



sub AAA(Byval A,ByvalB)
A=A+1
B=B+1
end sub




其中,call BBB(A,B)后,A=2,B=3
call AAA(A,B)后,A=1,B=2


值传递,相当于传的是一个副本,对于副本的操作不影响正本 地址传递,相当于是一个共有变量,传的是地址,该变量可以在过程中改变。


所以,联合编写程序时,我不希望自己的函数值受到别人的影响,通常会设定要按值传递,



值传递只是将变量的内容复制一份而已,函数进行操作的其实是另一个变量,只是另一个变量的值和传递的变量值是相同的。 而地址传递是直接把变量的地址传递给函数,这时函数是直接对原来的变量进行操作的。所以值会变化。 举例说吧:值传递就相当于克隆了一个同样的变量,操作的是克隆出来的那个,原来的变量没有变化,但是地址传递是直接对原来的变量进行操作,没有克隆新的变量。。。懂了吧,,, 也可以这样理解:比如要考试了,你有一份复习题,值传递就相当于别人借你的试卷去复印,然后在复印的那份上面做笔记,而地址传递就是别人直接在你原有的试卷上做笔记,没有复印,所以等你拿回来你会发现自己的试卷乱七八糟的,,,这下应该懂了哦。。。

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-6-12 09:36 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-29 13:10 , Processed in 0.188448 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表