VBA ByRef

Publication Date :

Blog Author :

Download FREE VBA ByRef In Excel Template and Follow Along!
VBA ByRef Excel Template.xlsm

Table Of Contents

arrow

Excel VBA ByRef Function Argument

In VBA, we use ByRef when passing arguments to a procedure (Sub or Function). ByRef stands for By Reference and it allows the procedure to modify the original variable directly.

When we make custom functions and want to use the value of any variable defined earlier before the function, we use the ByRef function. 

When a variable is passed ByRef, any changes made to it inside the procedure will reflect outside the procedure as well.

Using ByRef, we can point to the original variable value without altering the variable value. It is like passing the variable value directly to the VBA subprocedure or VBA function.

VBA ByRef
You are free to use this image on your website, templates, etc.. Please provide us with an attribution link

Key Takeaways

  • The VBA ByRef allows a procedure to directly modify the original variable passed to it. It is very useful if the same variable is used throughout the program even outside the procedure.
  • It is useful for returning multiple values from a procedure without using a return statement.
  • Once the variable is passed, changes made inside the procedure affect the original data outside the procedure.

How To Pass Argument Using VBA ByRef Argument?

Example #1

Look at the VBA code below.

Code1:

Sub Procedure1()

Dim k As Integer

k = 50

Procedure2 k

MsgBox k

End Sub

vba byref example1.1

In the first procedure above, we have declared the variable "k" as "Integer."

Then we have assigned the value to this variable as 50.

After that, we added a new line i.e.

Procedure2 k

It is the second procedure’s name. 

Code2:

Sub Procedure2(ByRef k As Integer)

k = k + 10

End Sub

vba byref example1.2

In this second procedure, we have declared the variable within the parenthesis as String in VBA, but we have used the word "ByRef."

ByRef k As Integer

Here we have assigned the value of the variable ā€œkā€ as

k = k + 10

We will run the code step-by-step by pressing the F8 key.

vba byref example1.3vba byref example1.4

Press the F8 key two more times and place a cursor on variable "k" to see its value .

vba byref example1.5

Since we have assigned the value as 50, it shows the value as 50. Now, it has highlighted the line Procedure2 k, which is the second procedure name.

If we press the F8 key now, it will jump out of the current procedure and go to the second procedure.

vba byref example1.6

Since we used the ByRef word, it carried the variable "k" value from the above procedure.

vba byref example1.7

Press the F8 key twice. 

It will go back to the previous subprocedure. If you notice, in the second procedure, we have applied the formula k = k + 10. i.e., the "k" value is 50, then adds 10 more to that, i.e., 60 in total.

example1.8

Now, the code is running in the first procedure, and in this procedure, the variable "k" value is 50. But press the F8 key and see the result in a message box.

example1.9

We got the result of 60 instead of the default value of 50 in this procedure.

We got 60 because, in the second procedure, we applied "ByRef, "so it carried the equation result (k = k + 10) to the current procedure.

Here, the first variable "k" value is 50, and in the second procedure, the variable "k" value is k + 10, i.e., 60, carried to the first procedure.

In the first procedure the original value of the variable "k" was 50, so By Ref has changed the original value from 50 to 60 by executing the equation k = k + 10 i.e., k = 50 +10 = 60.

Example #2

Take a look at one more example.

Code 1:

Sub P1()

Dim MyNumber As Long

MyNumber = 1

Call Change_ByRef(MyNumber)

' MyNumber is changed by the Change_ByRef procedure

MsgBox "My Number is now: " & MyNumber

End Sub

vba byref example 2.1
Code 2:

Sub Change_ByRef(ByRef NewNumber As Long)

NewNumber = 14

End Sub

example2.2

It works the same as the previous code.

Initially, the value of the variable "MyNumber" is 1. Then we call the procedure below by its name.

Call Change_ByRef(MyNumber)

In that procedure, the value of the variable is 14.

So, when it returns to the previous procedure, it will assign the new value to the variable as 14.

example2.3

Thus, VBA ByRef is used to allow a procedure to modify the original value of a variable that has been passed to it. It is also useful for returning multiple outputs from a Sub without using any return values, as seen above.

Interested in learning in-depth on VBA? You can watch out for this exciting course on Basic and Advanced VBA  available on our website. 

Frequently Asked Questions (FAQs)

1

How is VBA ByRef useful?

Arrow down filled
2

What is the difference between ByRef and ByVal?

Arrow down filled
3

When should one use VBA ByRef?

Arrow down filled