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代码至关重要。
热门推荐
日食背后的科学原理,你知道多少?
中国古代日食记录:千年观测的科学价值
地中海饮食:护心最佳拍档
冬至阳生:从最冷时节寻找新生力量
荞麦:四大益处,热性还是寒性,上火还是去火,四大禁忌需注意
九寨沟彩林正当时:最佳拍摄点与旅游攻略
铝扣板、石膏板、蜂窝大板,哪种更适合厨卫吊顶?
绥芬河-海参崴冬季跨境游:4天3000元玩得转
WTT中国大满贯:孙颖莎vs伊藤美诚,新生代巅峰对决
中国移动欠费滞纳金计算方式及注意事项
白煮虾这样做才最鲜美!
双十一物流大作战:EMS实时查询神器
感冒时的饮食指南:7种关键营养助你快速康复
朋友圈点赞后,如何高情商回复?
孕妇养宠必备:绿萝打造清新空间
肠衣保存全攻略:从清洁到储存的正确方法
一文读懂RSI指标:理论、实战案例与Python代码详解
昆明养老社区:四季如春的宜居环境与完善服务
水浒传再读:从名字解读三位首领的权谋与宿命
研究发现:水飞蓟宾有望用于吉尔伯特综合症治疗
正确保存猪肠衣:延长保质期的关键步骤与创新方法
最新美国绿卡申请指南:条件、流程、面试全解析
两项中药团体标准发布,构建饮片质量评价关键技术体系
沈阳到桂林:60小时自驾游穿越15城,附五日游攻略
谭盾:以创新精神融合东西方文化,成就国际音乐大师
《本草纲目》推荐:小米粥的养生秘密
七言绝句格律全解:押韵和平仄的完整指南
BDTX-1535在2期临床试验中显疗效,42%奥希替尼耐药患者肿瘤缩小
30只ST股涨停背后:新规下的投资风险与机遇
瘦西湖:扬州园林的典范,五亭桥、二十四桥等十大景点全览