byref和byval:一文读懂按地址传递(默认)和按值传递——vba
创作时间:
作者:
@小白创作中心
byref和byval:一文读懂按地址传递(默认)和按值传递——vba
引用
CSDN
1.
https://m.blog.csdn.net/yongshiqq/article/details/137816623
在VBA编程中,参数传递是一个基础但重要的概念。本文将通过对比ByRef(按地址传递)和ByVal(按值传递)两种方式,帮助读者深入理解它们的区别和应用场景。
在VBA中,函数或子程序的参数传递主要分为两种方式:ByRef(按地址传递)和ByVal(按值传递)。这两种方式在数据传递和修改方面有着本质的区别。
ByRef:按地址传递
ByRef是VBA默认的参数传递方式。当使用ByRef传递参数时,主程序会将变量的内存地址传递给被调用的子程序。这意味着子程序可以直接访问和修改主程序中的变量,回调时主程序的变量值会受到影响。
具体来说,ByRef传递过程如下:
- 主程序将变量的内存地址传递给子程序
- 子程序通过该地址直接操作主程序中的变量
- 主程序输出的是修改后的值
ByVal:按值传递
与ByRef不同,ByVal传递的是变量的副本,而不是变量的地址。这意味着子程序只能操作变量的副本,而不会影响主程序中的原始变量。如果需要在子程序中返回修改后的值,可以在子程序中设置输出参数。
ByVal传递过程如下:
- 主程序将变量的值复制一份传递给子程序
- 子程序对副本进行操作
- 主程序输出的仍是原值
代码示例
下面通过一个具体的代码示例来说明ByRef和ByVal的区别:
Sub TestByRefByVal()
Dim x As Integer
Dim y As Integer
x = 1
y = 1
' 调用ByRef方式的子程序
Call ChangeByRef(x, y)
MsgBox "ByRef调用后:" & vbCr & "x=" & x & " y=" & y
' 调用ByVal方式的子程序
Call ChangeByVal(x, y)
MsgBox "ByVal调用后:" & vbCr & "x=" & x & " y=" & y
End Sub
Sub ChangeByRef(ByRef a As Integer, ByRef b As Integer)
a = 10
b = 20
End Sub
Sub ChangeByVal(ByVal a As Integer, ByVal b As Integer)
a = 10
b = 20
End Sub
运行结果如下:
从运行结果可以看出:
- ByRef方式调用后,主程序中的变量x和y都被修改为10和20
- ByVal方式调用后,主程序中的变量x和y保持不变,仍然是1和1
总结
ByRef和ByVal是VBA中两种重要的参数传递方式,它们在数据传递和修改方面有着本质的区别。ByRef适合需要在子程序中修改主程序变量的场景,而ByVal则适用于需要保持主程序变量不变的场景。理解这两种传递方式的区别,对于编写高效、稳定的VBA代码至关重要。
热门推荐
中学生校园励志歌曲合集:80首经典曲目点燃青春梦想
强化学习:原理、算法、应用与未来展望
监理工作计划详解:作用、类型、应用场景及案例分析
2025,10个AI展望
如何识别诈骗电话?这份防诈指南请收好
一饿就恶心?专家教你识别低血糖与胃炎的健康警讯!
突发!恒大1.2亿欠条1元拍卖,许家印2.4万亿元巨债啥时候还上?
如何选择合适的驱动电流以确保步进电机的稳定运行
走进水墨花鸟画:揭秘传统手法与艺术魅力
清华数据大讲堂丨黄丽华:数据要素流通与数据市场建设现状及问题初探
疼痛患者的最强福音!胶原酶溶解术让你远离“腰腿痛”
民事起诉状法律依据怎么写才有效
从这三个关键指标来判断楼市是否回稳
扬州为何自古出美女?从历史、文化、基因多维度解析
JVM垃圾回收机制详解
天池水库旅游攻略:自然奇观探秘与最佳游览路线推荐 🌄
Git后悔药之回滚及撤销操作(图文详解)
一文彻底搞懂深度学习 - 模型评估(Evaluation)
厨房吊顶装修指南,材料选择与技巧详解
英超25轮前瞻:曼城纽卡上演强强对话,阿森纳新进攻组合迎考验
苏打绿发行新专辑《春·日光》:双CD收录经典曲目与现场精选
成功的可复制性商业模式有多重要(可复制的经营模式)
构建全面完善的城市生命线监测预警系统:城市基础设施安全运行的坚固防线
原来身份证后四位有这么多讲究!涨知识了,快来看看
一到中老年血液循环就变慢?教你8招改善血液循环
腊八节的由来、习俗和传说故事
餐厅职位分类有哪些?
MySQL的两阶段提交是什么?它是如何工作的?
《凉州词二首·其一》深度解析:王之涣笔下的边塞风情与壮志豪情
“控近视、兴未来”眼健康大会:抢抓近视管理“黄金期”