Table of Contents

ByRef and ByVal

You can pass arguments to a procedure (function or sub) by reference or by value. By default Excel VBA passes arguments by reference. As always we will use an easy example to make things more clear.

Place a command button on your worksheet and add the following code lines:

Dim x As Integer
x = 10

MsgBox Triple(x)
MsgBox x

The code calls the function Triple. It’s the result of the second MsgBox we are interested in. Functions need to be placed into a module.

1. Open the Visual Basic Editor and click Insert Module.

2. Add the following code lines:

Function Triple(ByRef x As Integer) As Integer

x = x * 3
Triple = x

End Function

Result when you click the command button on the sheet:

ByRef Result

ByRef Result

3. Replace ByRef with ByVal.

Function Triple(ByVal x As Integer) As Integer

x = x * 3
Triple = x

End Function

Result when you click the command button on the sheet:

ByVal Result

ByVal Result

Explanation: When passing arguments by reference we are referencing the original value. The value of x (the original value) is changed in the function. As a result the second MsgBox displays a value of 30. When passing arguments by value we are passing a copy to the function. The original value is not changed. As a result the second MsgBox displays a value of 10 (the original value).

Leave A Comment

Excel meets AI – Boost your productivity like never before!

At Formulas HQ, we’ve harnessed the brilliance of AI to turbocharge your Spreadsheet mastery. Say goodbye to the days of grappling with complex formulas, VBA code, and scripts. We’re here to make your work smarter, not harder.

Related Articles

The Latest on Formulas HQ Blog