ByVal:传递变量时,复制一份该变量,传入过程或函数。在过程和函数内部对该变量进行修改,只对该副本有效,对上一级过程(父过程)的变量没有影响。ByRef:传递变量时,将该变量的引用地址传入过程或函数。传入引用地址意味着,在过程或函数内部对其修改时,也会影响上一级过程(父过程)中的变量
很多时候,我们为了程序的可读性和便于维护,会通过子程序或自定义函数的方式来构建主程序框架,不可避免的就需要使用到参数的传递,ByVal或ByRef。 01举个栗子 我们需要通过子程序Byval传递参数来显示字符串str的值,示例程序如下: Option Explicit Public Sub rocket_DemoByValue() '// 适用于ByVal示例 '// 2024-...
但在需要修改子程序中参数值的情况下,ByVal并不适用,因为修改的是副本而非原始值。2. ByRef的使用: 概念:ByRef传递的是参数的引用,即传递的是值的地址。 特点:在子程序中修改该引用的值,会直接影响到主程序中的原始值。 适用场景:当需要在子程序中修改主程序中的值时,使用ByRef更为合适。...
1、对于ByVal/ByRef关键字,想必很多人都能说一番用途。没错,这俩关键字就是用来传参的。笔者在《为什么VB/VBA中传递数值时,ByVal比ByRef更高效?》一文中,也是详细而深入地讲解了二者的性能区分和适用场景,有兴趣的读者可以关注阅读,说不定就有不小的收获哦。2、对于传参,一般都是在声明参数时使用。在...
4、我们知道指针就是地址,对于VB/VBA而言就是Long类型。这是典型的整数数值类型,当ByRef传址时,就是将其Push到栈上,然而这仅是地址,要想参与计算,还得寻址取值。如果ByVal传值,则是直接将数值Push到栈上,然后就可以直接使用了,省去了寻址取值的过程。这么一比较,自然后者更更省指令(少包了一层,更...
则使用ByVal。举例来说,处理大量表格数据时,采用ByRef传递数组以减少内存消耗;而在需要修改单元格内容的场景下,则应使用ByVal确保主程序中的数据更新。综上,ByVal与ByRef在VBA中的应用需根据实际需求灵活选择,以实现程序的高效执行和资源的合理利用。希望本文提供的见解对您的VBA学习有所帮助。
简明一点说:以ByVal传递给过程,过程里有代码对这个变量做了更改,在过程结束返回后这个变量还是调用过程前的值,不会变化。以ByRef传递给过 程,过程里有代码对这个变量做了更改,在过程结束返回后这个变量的值就是过程里改成的那个值。 下面举个例子: (1)ByVal示例 Sub TmpByVal() Dim a As String a = "2...
个人认为,在数据量较大且不需改变初始值的情况下,使用ByRef可以节省内存,因为ByVal每次传递都会复制原始值。例如,当我们读取表格数据到数组后,需要多次使用这些值时,采用ByRef传递参数更为合适。反之,若需要在子程序中修改单元格内容,则应使用ByVal。通过以上分析,我们可以得出关于ByVal和ByRef的使用...
Function AddByRef(ByRef num1 As Integer, ByRef num2 As Integer) As Integer num1 = num1 + 1 num2 = num2 + 1 AddByRef = num1 + num2 End Function Sub Test() Dim a As Integer Dim b As Integer a = 1 b = 2 MsgBox "AddByVal: " & AddByVal(a, b) ' 输出结果为 5,a 和 ...
Byref,地址传递参数,传递的是地址,过程操作的是变量的地址 Byval,值传递参数,将变量的内容复制了一遍,过程操作的是另外一个变量,只不过这两个变量名称一样,值一样 Vba中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用同一个数值。