VBA ByRef |使用Excel VBA ByRef函数传递参数

Excel VBA ByRef函数参数

VBA中的ByRef 是一个称为 引用 当我们创建自定义函数并且想要使用在使用ByRef函数之前在函数中定义的任何变量的值时,我们在代码中提供对任何参数的引用,使用的语法很简单,即Function Function-Name (ByRef变量作为数据类型)。

通过使用Byref,我们可以指向原始变量值,而无需更改变量值。这就像将变量值直接传递给VBA子过程或VBA函数一样。

如何使用VBA ByRef参数传递参数?

您可以在此处下载此VBA ByRef Excel模板– VBA ByRef Excel模板

范例#1

有关示例,请查看下面的VBA代码。

代码1:

 Sub Procedure1()Dim k As Integer k = 50 Procedure2 k MsgBox k End Sub 

代码2:

 子过程2(ByRef k作为整数)k = k + 10 End Sub 

在第一个过程中,我已将变量“ k”声明为Integer。

然后,我将此变量的值分配为50。

之后,我添加了新行,即

程序2 k

这是第二个过程名称。在此过程中,我在VBA中将括号内的变量声明为String,但使用了“ ByRef”一词。

 ByRef k作为整数 

在这里,我将变量“ k”的值分配为

k = k + 10

好的,现在我将按F8键逐步运行代码。

再按两次F8键,然后将光标放在变量“ k”上,以查看变量“ k”的值。

由于我们已将值指定为50,因此将其显示为50。 程序2 k 这是第二个过程名称。

如果现在按F8键,它将跳出当前过程并进入第二个过程。

现在,由于我们使用了ByRef单词,因此它带有上述过程中的变量“ k”值。

按两次F8键将返回到上一个子过程。如果您在第二步中注意到,我将公式应用为k = k +10。即,“ k”值为50,则该值再增加10,即总计为60。

现在,代码正在第一个过程中运行,在此过程中,变量“ k”的值为50。但是按F8键并在消息框中看到结果。

在此过程中,我们得到的结果是60,而不是默认值50。

之所以得到60,是因为在第二个过程中我们应用了“ ByRef”,因此,它将方程结果(k = k + 10)应用于当前过程。

在此,第一变量“ k”的值为50,而在第二过程中,变量“ k”的值为k + 10,即60,该值被传递给第一过程。

在第一个过程中,变量“ k”的原始值为50,因此By Ref通过执行等式k = k + 10(即k = 50 +10 = 60)将原始值从50更改为60。

范例#2

现在再看一个例子。

代码1:

 Sub P1()Dim MyNumber as Long MyNumber = 1调用Change_ByRef(MyNumber)'通过Change_ByRef过程MsgBox更改MyNumber“我的号码现在是:”&MyNumber结束 

代码2:

 子Change_ByRef(ByRef NewNumber as Long)NewNumber = 14结束子 

它的工作原理与之前的代码完全相同。

最初,变量“ MyNumber”的值为1。然后我们按其名称调用以下过程

 致电Change_ByRef(MyNumber)

在该过程中,变量的值为14。

因此,当返回上一步时,它将为该变量分配新值,即14。