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不会改变主程序变量值。

相关推荐
WX-bisheyuange3 分钟前
基于Spring Boot的社团管理系统的设计与实现
前端·javascript·vue.js·毕业设计
橙某人13 分钟前
LogicFlow 插件魔改实录:手把手教你重写动态分组(DynamicGroup)🛠️
前端·javascript·vue.js
古城小栈15 分钟前
go-zero 从入门到实战 全指南(包的)
开发语言·后端·golang
阿蔹23 分钟前
UI测试自动化-Web-Python-Selenium-2-元素操作、浏览器操作
前端·python·selenium·ui·自动化
lsx20240626 分钟前
Python 3 函数
开发语言
-To be number.wan27 分钟前
C++ 进阶技巧:如何让 cout << 自定义对象 正常输出?
开发语言·c++
2501_9444460030 分钟前
Flutter&OpenHarmony状态管理方案详解
开发语言·javascript·flutter
一路往蓝-Anbo32 分钟前
C语言从句柄到对象 (三) —— 抛弃 Malloc:静态对象池与索引句柄的终极形态
c语言·开发语言·数据结构·stm32·单片机·算法
谎言西西里42 分钟前
React hooks 之 一篇文章掌握 useState 和 useEffect 的核心机制
前端·react.js
lbb 小魔仙1 小时前
【Java】Spring Data JPA 详解:ORM 映射、查询方法与复杂 SQL 处理
java·开发语言·sql·spring cloud