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

相关推荐
四六的六4 分钟前
WebView里跑RAG——浏览器内知识检索增强实战
前端·实战·个人开发·webview·ai大模型·rag·webview内嵌开发
Yvonne爱编码5 分钟前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
子豪-中国机器人9 分钟前
Python 阶段性综合强化训练(新版)
开发语言·python·语音识别
z落落12 分钟前
C# WinForm TreeView 树形控件+ListView控件+菜单栏
开发语言·c#
码云数智-园园12 分钟前
码云数智网站SEO设置指南:如何让百度搜索到你的网站
开发语言
赴生-12 分钟前
C++进阶 智能指针
开发语言·c++
wanger6112 分钟前
Vue学习笔记
前端·javascript·vue.js
杨先生哦12 分钟前
【2026热端攻防系列 3/12】反射型&存储型XSS全解:AI批量免杀、WAF绕过与企业级防御
前端·人工智能·笔记·web安全·xss
chao18984416 分钟前
GNSS软件接收机 MATLAB 实现(GPS L1 CA码)
开发语言·matlab
问心无愧051317 分钟前
ctf show web入门123
android·前端·笔记