ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4861|回复: 3

[转帖] VBA中传递参数方式byval(副本)和byref(共有变量)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-10-24 10:02 | 显示全部楼层 |阅读模式
本帖最后由 autumnalRain 于 2015-10-26 15:08 编辑

vba 传递参数值时,分为Byval 和Byref
参数分为形参和实参:形参指的是过程名称中用括号括起来的参数,实参指的的是调用过程中,向过程传递的数据参数。可以理解为:形参相当于公式中的自变量,实参相当于使用公式时代入自变量中的具体数值。

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

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


  1. Sub TESTParameter()
  2. Dim A As Integer, B As Integer
  3. A = 1
  4. B = 2
  5. Call AAA(A, B)
  6. Debug.Print A, B
  7. Call BBB(A, B)
  8. Debug.Print A, B
  9. End Sub
复制代码


  1. Sub BBB(ByRef A, ByRef B)
  2. A = A + 1
  3. B = B + 1
  4. End Sub
复制代码


  1. Sub AAA(ByVal A, ByvalB)
  2. A = A + 1
复制代码


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


值传递,相当于传的是一个副本,对于副本的操作不影响正本;
地址传递,相当于是一个共有变量,传的是地址,该变量可以在过程中改变。
所以,联合编写程序时,我不希望自己的函数值受到别人的影响,通常会设定要按值传递,值传递只是将变量的内容复制一份而已,函数进行操作的其实是另一个变量,只是另一个变量的值和传递的变量值是相同的。而地址传递是直接把变量的地址传递给函数,这时函数是直接对原来的变量进行操作的。所以值会变化。

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





TA的精华主题

TA的得分主题

发表于 2018-10-5 19:40 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-5-13 15:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-5-12 18:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我一直也用byval的
但剛好遇上了問題才發現, 效能還是相差很大的
不要把數組以byval形式傳去子程序循環
等同不斷的複製數組, 非常吃效能
改以byref後瞬間計算完了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 00:46 , Processed in 0.028699 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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