byref和byval:一文读懂按地址传递(默认)和按值传递——vba

在vba中,经常用地调用子程序,参数传递分为:

byref ,被调用程序 按地址传递,传回主程序的参数,回调时会受影响。

按地址传递(ByRef),是指主程序直接将数据交给子过程(过程中定义传递方式),在过程中修改、调试、返回给主程序,主程序输出的是修改后的值。

VBA默认的是 byref方式

byval ,被调用程序 按值传递,传回主程序的参数,回调时会不受改变。

按值传递(Byval),是指将主程序的值(副本一份)给子过程,过程对副本操作,主程序输出的仍是原值。若想输出值传递后的值,可在子过程中设置输出。

代码如下:

复制代码
Sub test1(ByRef a)
a = a + 1
End Sub
 
Sub test2(ByVal b)
b = b + 1
End Sub
 
Sub main1()
'yngqq@2024年4月16日10:46:28
x = 1
y = 1
test1 x
test2 y
MsgBox "x=1,  y=1,调用子程序后:" & vbCr & "x=" & x & "    y=" & y
End Sub

运行结果:

由此可见,byref会修改主程序变量值,而byval不会改变主程序变量值。

相关推荐
Oneslide16 小时前
UI设计-企业OA风格
前端
程序员海军16 小时前
我用了 8 个月 Codex CLI,总结出这套 AI 编程工作流
前端·后端·aigc
techdashen17 小时前
Rust 中的小字符串:smol_str 与 smartstring 的对决
开发语言·后端·rust
এ慕ོ冬℘゜17 小时前
手写一款高兼容、零BUG图片预览组件|前端
前端·bug
devilnumber17 小时前
java自定义事件处理器极简版:「外卖点餐」场景
java·开发语言
铁链鞭策大师17 小时前
javaEE之多线程(2)
java·前端·java-ee
小何code17 小时前
C语言【初阶】第1节,初识C语言
c语言·开发语言
KaMeidebaby17 小时前
卡梅德生物技术快报|生信实操:ChIP 染色质免疫共沉淀技术流程、短板与替代方案详解
前端·人工智能·物联网·百度·新浪微博
weixin1997010801617 小时前
[特殊字符] 【性能提升300%】仿1688首页的Webpack优化全记录(附构建分析Python脚本)
前端·python·webpack
代码小书生17 小时前
getpass,一个安全输入的 Python 库!
开发语言·python·安全