VBA Optional Parameter

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Last updated on May 20, 2022

This article explains optional parameters in VBA.

Functions that are used in VBA, be they built in functions or custom functions, can contain arguments. Arguments are variable values that are passed to the function in order to run the calculation as required. If these arguments are not always needs to run the function, they are called optional arguments or optional parameters.

Custom Functions

Consider the following custom function that we are going to use the calculate the price of a product:

Function CalculatePrice(Qty As Double, UnitPrice As Double, Optional Cur As String) As String
  Dim Price As Double
  Price = Qty * UnitPrice
  If Cur = "" Then
    CalculatePrice = "$" & Format(Price, "#,##0.00")
  Else
    CalculatePrice = Cur & Format(Price, "#,##0.00")
  End If
End Function

Now to use this function, we can pass the quantity and unit price to the function, and if we wish to do so, the currency we wish to return the result in.

For example:

Sub TextPrice()
  MsgBox CalculatePrice(20, 15.8, "£")
End Sub

This would return the following message box:

vba optional msgbox

However, if we were to run the following code:

Sub TextPrice()
  MsgBox CalculatePrice(20, 15.8)
End Sub

Then the following message box would be returned.

vba optional msgbox $

This is due to the fact that in our function, the cur variable is optional. We have allowed for an empty string in our code so that if that variable does not contain a value, then a default value of “$” is returned instead. We could also have left it out completely.

Function CalculatePrice(Qty As Double, UnitPrice As Double, Optional Cur As String) As String
  Dim Price As Double
  Price = Qty * UnitPrice
  CalculatePrice = Cur & Format(Price, "#,##0.00")
End Function

The function above would then just return 316.00 if the cur optional variable was not populated when calling the function.

vba optional msgbox no opt

If we always want the number to be formatted with the dollar sign, unless the user indicates a different currency, we can make use of the default value option instead of using an IF Statement.

Function CalculatePrice(Qty As Double, UnitPrice As Double, Optional Cur As String="$") As String 
   Dim Price As Double 
   Price = Qty * UnitPrice 
   CalculatePrice = Cur & Format(Price, "#,##0.00") 
End Function

Notice that in defining the optional parameter, we have put in a default value of “$”.

This means that when the function is used, a user can leave out that parameter, and the dollar sign would be returned to the user, or, a user could put in a different currency symbol and this would then be returned.

For example:

Sub TextPrice()   
  MsgBox CalculatePrice(20, 15.8, "R") 
End Sub

would return:

VBACustomFunction R

whereas

Sub TextPrice()   
  MsgBox CalculatePrice(20, 15.8) 
End Sub

would return:

vba optional msgbox $

Built in VBA Functions

Built in VBA functions often have optional parameters that we do not use when we use the functions.

For example if we were to use the MsgBox function, many of the parameters in this function are optional.

vba optional msgbox parameters

In the syntax above, the only parameter that is required is the Prompt parameter.  As the other parameters are in square brackets, we know that these are optional parameters.  Some of these parameters may have a default value if not used like the Buttons parameter (vbOKOnly) while others can remain empty (Title, HelpFile, Context for example)

Sub CallMe()
  MsgBox ("Good morning - how are you")
End Sub

If we run the above macro, this message box will appear:

vba optional msgbox good morning

However, if we amend the macro to this below:

Sub CallMe()
  MsgBox "Good morning - how are you", vbQuestion, "HELLO USER!"
End Sub

Then a more customized box will appear:

vba optional msgbox good morning question

Both macros will run but the second one enables us to customize the msgbox will a few more options!

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples