byref和byval:一文读懂按地址传递(默认)和按值传递——vba
创作时间:
2025-03-17 23:18:42
作者:
@小白创作中心
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代码至关重要。
热门推荐
春节去海螺沟,一场说走就走的冰雪奇缘!
秋日海螺沟摄影指南:捕捉最美瞬间
海螺沟探秘:贡嘎雪山下的日照金山奇景
少言寡语的背后:是生闷气还是高情商?
广东三大菜系谁更健康?营养专家揭秘!
广州美食探秘:粤菜的前世今生
昆明到腾冲自驾游:最美风景在路上!
冬日自驾游:昆明-大理-腾冲全攻略
交强险网上续保攻略:告别爱车“裸奔”!
培养情商提高领导力
机器人SLAM建图与自主导航:从基础到实践
春节吃鱼有讲究:别让好运翻船!
主持人行业的就业前景与发展现状(探究主持人行业的职业发展路径和市场需求)
混合式培训:线上线下相结合
在线教育的兴起:灵活便捷的学习新方式与未来展望
广州园林博览会正式开幕,全市10余处公园春节可赏花看展
春节带娃打卡迪士尼,过个童话新年!
杜甫和苏轼:都是苦命人却有不同的人生和诗风
苗族服饰成社交媒体新宠!
高铁衡山西站到南岳衡山风景区最全攻略
自制黑麦面包:两种制作方法详解及健康益处全解析
健康饮食新宠:黑麦面包制作全攻略
黑麦粉烘焙热潮:你get了吗?
云南临沧:西南边陲的宝藏小城,民族风情浓郁,好吃好玩超划算
四姑娘山摄影攻略:捕捉最美瞬间
探访东方阿尔卑斯山:四姑娘山的大熊猫家园
四姑娘山长坪沟冬季徒步攻略:征服雪域高原的必备指南
IPv6赋能数字化医疗:从设备互联到远程医疗
NAT64:IPv6转换技术的新宠儿
伊犁师大IPv6安全升级,你关心吗?