How to Use Private Sub in VBA: Master it in 3 Minutes (Excel)

Written by Kasper Langmann

The Visual Basic for Applications (VBA) language is a powerful tool that can automate and enhance your Excel experience. One of the key features of VBA is the Private Sub procedure. This article will guide you through the process of using Private Sub in VBA, helping you master it in just three minutes.

Understanding Private Sub in VBA

Before we delve into the practical application of Private Sub, it’s crucial to understand what it is and how it functions. Private Sub is a type of procedure in VBA that can only be accessed within the module where it is declared. This means that it is not visible or accessible from other modules or from Excel itself.

Private Sub procedures are typically used to carry out a specific task that is only relevant within the context of the module where it is declared. This encapsulation of functionality helps to keep your code organized and reduces the risk of unexpected errors.

Private Sub vs Public Sub

It’s important to distinguish between Private Sub and Public Sub procedures in VBA. While Private Sub procedures can only be accessed within the module where they are declared, Public Sub procedures can be accessed from anywhere in your VBA project, including from Excel.

This difference in scope can have significant implications for how you structure your VBA code. If a procedure needs to be used across multiple modules, it should be declared as a Public Sub. However, if a procedure is only relevant within a specific module, declaring it as a Private Sub can help to keep your code clean and organized.

Creating a Private Sub Procedure

Now that we have a basic understanding of what a Private Sub is, let’s look at how to create one. The process is quite straightforward and can be broken down into a few simple steps.

First, you need to open the VBA editor by pressing Alt + F11 in Excel. Then, in the Project Explorer window, select the module where you want to declare your Private Sub. If you don’t have a module yet, you can create one by clicking on Insert > Module.

Writing the Private Sub Code

Once you have selected the appropriate module, you can start writing your Private Sub procedure. The syntax for a Private Sub is as follows:

Private Sub ProcedureName()
    ' Your code here
End Sub

Replace ‘ProcedureName’ with the name of your procedure. The name should be descriptive of the task that the procedure performs. The code that you want to execute when the procedure is called should be placed between the Private Sub and End Sub lines.

It’s important to note that the procedure name is case insensitive, meaning that ‘ProcedureName’ and ‘procedurename’ would be treated as the same procedure. However, it’s a good practice to use consistent casing for readability and ease of debugging.

Calling a Private Sub Procedure

After you have declared your Private Sub procedure, you can call it within the same module by simply using its name followed by parentheses. For example, if your procedure is named ‘CalculateTotal’, you would call it like this:


Remember, because a Private Sub is only accessible within the module where it is declared, you cannot call it from another module or from Excel. If you try to do so, you will receive an error.

Using Private Sub with Events

One of the most common uses of Private Sub procedures in VBA is in conjunction with events. Events are actions performed by the user or by Excel itself, such as clicking a button, opening a workbook, or changing a cell’s value.

By declaring a Private Sub procedure for an event, you can specify what code should be executed when that event occurs. This allows you to automate tasks and enhance the functionality of your Excel workbooks.

Example of Private Sub with Events

Let’s look at an example of how to use a Private Sub with an event. Suppose you want to display a message box when a workbook is opened. You could accomplish this with the following code:

Private Sub Workbook_Open()
    MsgBox "Welcome to this workbook!"
End Sub

This code declares a Private Sub procedure for the Workbook_Open event. When the workbook is opened, the procedure is called, and a message box is displayed with the message “Welcome to this workbook!”.


Private Sub procedures are a powerful feature of VBA that allow you to encapsulate functionality within a specific module. They are particularly useful when used in conjunction with events, allowing you to automate tasks and enhance the functionality of your Excel workbooks.

By understanding what Private Sub procedures are, how to create them, and how to use them with events, you can take your Excel skills to the next level and become a more efficient and effective user.