这是VBA访谈中最常见的问题之一。在本文中,我们将学习excel VBA中ByVal和ByRef参数之间的区别。

定义:

ByRef参数:这是by引用的字面缩写形式。当一个参数作为ByRef参数传递给另一个子函数时,将发送实际变量的引用。对变量副本所做的任何更改都将反映在原始参数中。

我们可以说,值的位置是使用ByRef传递给函数的,而不是值的位置。

这是VBA中的默认参数。在论点之前,我们不需要写ByRef。

语法:

Sub x(a as Variant)

‘或Sub x(以变体形式引用)

ByVal参数:按值的字面缩写形式。当参数作为ByVal参数传递给其他子函数时,仅发送参数值。原始参数保持不变。对外部函数或sub所做的任何更改都不会反映在原始参数中。

要将参数声明为ByVal,您需要在参数之前使用ByVal关键字。

语法:

Sub x(ByVal a as Variant)

现在我们知道了定义。让我们看一个例子,并克服它。

ByRef示例这是一个简单的程序。

Sub X(ByRef a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

因此,这里有两个子例程。第一个子元素是X,它使用一个变体参数作为ByRef。 (您可以忽略ByRef关键字。这是默认设置。)

接下来,将a的值设置为20 end,然后打印a的值。

Sub Y是调用子例程X的主要子例程。它设置a = 10的值,然后调用子例程X并将passa作为参数。

然后在Y中打印a的值。现在,当您运行Sub Y时,这就是您得到的输出。

在a = 20的子X值中在a = 20的子Y值中

结论:原始a的值由sub X更改,并且两个sub的值均设置为20。您可以看到运行Sub Y时,a的初始值为10。Y调用X(a)。 X将a的值设置为20。它打印“ a的sub X值= 20”。

0046

控制权返回y并以a = 20的子Y值打印。这是ByRef参数的效果。

ByVal示例:

这是一个ByVal示例

这两个示例都是相同的,唯一的区别在于参数传递。

在X中,参数被声明为ByVal。这次运行Y子例程时,输出为:

Sub X(ByVal a As Variant)

a = 20

Debug.Print "in sub X value of a = " & a

End Sub

Sub Y()

a = 10

Call X(a)

Debug.Print "in sub Y value of a = " & a

End Sub

在a的子X值中= 20

|结论:子X不会更改原始a的值。X的值为20,Y的值为10。当Y用a调用X时,它仅发送a的值,而不发送a的地址。

因此,对a所做的任何更改都不会反映在原始变量中。

0047

为了进行测试,如果在将a in X的值设置为20之前将其打印,它将打印10。因为使用byVal将10传递给X in a。使用ByRef将Y的a发送到X的a。这是一个简单的问题,但是我们很多人在vba采访问题中对此感到困惑。原因是我们没有太多使用它。大多数时候,我们将值复制到不同的变量中。*是的,这是excel VBA中bw ByRef和ByVal参数的区别。如果您对此主题或任何其他VBA或Excel主题有任何疑问,请告诉我。评论部分归您所有。

相关文章:

0048

链接:/ files-workbook-and-worksheets-in-vba-delete-sheets-without-confirmation-prompts-using-vba-in-microsoft-excel [在Microsoft Excel中使用VBA删除没有确认提示的工作表] |||链接:/在VBA中添加文件/工作簿和工作表,并在Microsoft Excel中使用VBA添加和保存新工作簿[在Microsoft Excel 2016中使用VBA添加和保存新工作簿] ||||链接:/ menus-toolbars-status-bar-in-vba-display-message-on-the-statusbar-message-on-the-statusbar-using-vba-in-microsoft-excel [在Excel VBA状态栏上显示消息] |||| link:/ general-topics-in-vba-off-warning-messages-using-vba-in-microsoft-excel [在Microsoft Excel 2016中使用VBA关闭警告消息]

热门文章:

link:/ vlookup-functions的公式和函数介绍[Excel中的VLOOKUP函数]