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代码至关重要。
热门推荐
古典诗歌中的东南西北风
拍的是心情,记录的是美好,探索摄影中的情感表达
心学问心理教育,面对青春期挑战:家长与孩子共同成长的策略
部队VR训练系统:军事训练领域的革新力量
西南科大核医疗废液快速处理技术获中美两国专利授权
睡觉流口水正常吗?有几种情况是身体在报警
大便黏腻背后的原因找到了!这种常见食物要多吃,及时解决很重要~
正确的借条写法示例图片及说明
燃气热水器E1故障原因及处理方法详解
如何让销售经理懂产品
如何判断拘留的性质:法律规定与实务分析
敏感肌肤用什么护肤品比较好 敏感肌肤如何护理
数字人民币试点成绩单,多地公布!
老鼠:种类、特征、生活习性及防治方法
“体育+”超预期!亚冬会开幕式导演隋文静:创新性融合展现冰雪运动和中国文化
化工智能巡检系统:化工安全生产的有力保障
希腊雅典美食推荐:4家当地海鲜、烤肉与希腊餐厅
力能扛鼎的刘盈:吕后专权下的悲剧与抉择
青铜器保护修复技术的研究与实践
褪黑素完全指南:从成瘾性到使用方法,全面解析这一热门助眠补充剂
儿童饭后腹痛腹泻怎么缓解
夏天早餐吃这4样,一整天血糖稳稳哒!
二手房买卖出售费用明细表:全面解析各类费用
全球央行货币政策变化与我国对外投资|政策与监管
破解2岁宝宝走路不稳的现象及对策
毕业生必读:离校前需要办理哪些手续?
10公里,跑多少才算“高手”?
李云霄:在平凡与真实中,感受生命的力量
元素周期表的组成和分类
锡膏合金成分大全:特性对比与应用指南