How to Use Excel VBA MsgBox Without Pause?
The Excel VBA MsgBox function is a useful tool for displaying messages to users in your VBA macros. However, by default, the MsgBox function pauses macro execution until the user clicks “OK” to dismiss the message box. In some cases, you may want to display a message box without pausing the macro.
This article will show you how to use the MsgBox function in Excel VBA without causing your macro to pause execution. We’ll cover the basics of the MsgBox function, the potential issues with pausing macro execution, and several solutions for using MsgBox without pausing.
Understanding the Excel VBA MsgBox Function
The VBA MsgBox function displays a message in a dialog box and waits for the user to click a button before returning a value indicating which button was clicked. The basic syntax is:
MsgBox(prompt, [buttons], [title], [helpfile], [context])
The parameters are:
- prompt: Required. The message to display in the dialog box.
- buttons: Optional. A numeric expression that specifies which buttons and icons appear in the message box. Default is 0.
- title: Optional. A string expression displayed in the title bar of the dialog box.
- helpfile and context: Optional. For connecting the message box to a custom Help file. Rarely used.
The buttons argument lets you specify which buttons appear in the message box:
Constant | Value | Description |
---|---|---|
vbOKOnly | 0 | Displays only an OK button |
vbOKCancel | 1 | Displays OK and Cancel buttons |
vbAbortRetryIgnore | 2 | Displays Abort, Retry, and Ignore buttons |
vbYesNoCancel | 3 | Displays Yes, No, and Cancel buttons |
vbYesNo | 4 | Displays Yes and No buttons |
vbRetryCancel | 5 | Displays Retry and Cancel buttons |
You can also add an icon to the message box by adding one of these values:
Constant | Value | Description |
---|---|---|
vbCritical | 16 | Displays “X” icon |
vbQuestion | 32 | Displays “?” icon |
vbExclamation | 48 | Displays “!” icon |
vbInformation | 64 | Displays “i” icon |
The MsgBox function returns a value indicating which button the user clicked:
Constant | Value | Description |
---|---|---|
vbOK | 1 | User clicked OK |
vbCancel | 2 | User clicked Cancel |
vbAbort | 3 | User clicked Abort |
vbRetry | 4 | User clicked Retry |
vbIgnore | 5 | User clicked Ignore |
vbYes | 6 | User clicked Yes |
vbNo | 7 | User clicked No |
Capturing the User’s Response
In many cases, you’ll want to capture the user’s response to the message box and take different actions based on which button they clicked. To do this, you can store the result of the MsgBox function in a variable and then use a conditional statement to test the value.
For example:
Dim result As Integer
result = MsgBox("Do you want to continue?", vbYesNo + vbQuestion, "Confirm")
If result = vbYes Then
' User clicked Yes, continue with macro
Else
' User clicked No, exit macro
Exit Sub
End If
This code displays a message box with Yes and No buttons and a question mark icon. The user’s response is stored in the result variable. The If statement then checks the value of result and takes the appropriate action based on whether the user clicked Yes or No.
The Problem with MsgBox Pausing Macro Execution
By default, the MsgBox function in VBA will pause the execution of your macro code until the user dismisses the dialog box by clicking a button. In some cases this is the desired behavior, but other times you may want the message box to appear without interrupting the flow of the macro.
For example, let’s say you have a macro that performs a long operation like importing data from an external source. You want to display a “Please wait…” message to the user while the import is running, but you don’t want the message box to pause the import process itself.
Potential Issues Caused by Pausing
Pausing macro execution with a message box can cause several potential issues:
- Slower performance: If your macro needs to display frequent message boxes, the pauses can significantly slow down the overall execution time.
- Unresponsive Excel: While a message box is displayed, the Excel application may become unresponsive to user input. This can be frustrating for users who expect to be able to interact with Excel while a macro is running.
- Timing issues: In some cases, pausing macro execution with a message box can cause timing issues, especially if your macro needs to coordinate with other processes or applications.
Solutions for Using MsgBox Without Pausing
There are a few different ways to use MsgBox in VBA without pausing or interrupting your macro code execution:
1. Use the vbApplicationModal Argument
One option is to use the less common vbApplicationModal argument when calling the MsgBox function. This displays the message box “modally” but does not pause execution of your VBA code.
For example:
MsgBox "Import in progress, please wait...", vbInformation + vbApplicationModal
' Code execution continues without pausing
The message box will still appear on top of all other windows, but the macro will continue running in the background.
2. Use DoEvents
Another approach is to use the DoEvents function to allow Excel to process other events in the background while a MsgBox is displayed.
For example:
MsgBox "Import in progress, please wait...", vbInformation
DoEvents
' Code execution continues without pausing
This will display the message box and then immediately use DoEvents to allow other processing to continue. The macro does not fully pause.
3. Use Application.OnTime
A third option is to use the Application.OnTime method to schedule a MsgBox to appear at a future time without pausing execution.
For example:
Application.OnTime Now + TimeValue("00:00:01"), "ShowMsgBox"
' Code execution continues without pausing
Sub ShowMsgBox()
MsgBox "Import completed successfully!", vbInformation
End Sub
This schedules the ShowMsgBox subroutine to run 1 second in the future (the TimeValue function is used to convert the time to the proper format). The main macro code continues to execute without pausing.
When Application.OnTime is used, it’s a good idea to also include code to cancel the scheduled macro in case an error occurs or the macro ends early. You can use the Application.OnTime method again with the Schedule argument set to False to cancel it.
For example:
Application.OnTime Now + TimeValue("00:00:01"), "ShowMsgBox", Schedule:=False
4. Use a UserForm Instead of MsgBox
In some cases, you may want to consider using a custom UserForm instead of the built-in MsgBox function. With a UserForm, you have complete control over the appearance and behavior of the message, and you can display it modally or modelessly as needed.
Creating a UserForm requires more setup and coding compared to using MsgBox, but it can be a good solution if you need more flexibility or customization.
Tips for Message Boxes in Excel VBA
Here are a few tips and best practices to keep in mind when using message boxes in your Excel VBA macros:
Keep messages concise
Try to keep the text in your message boxes brief and to the point. Users are more likely to read and understand short, focused messages.
Use the appropriate buttons and icons
Choose the appropriate buttons and icons for your message boxes based on the type of message and the expected user response. For example, use Yes/No buttons for confirmation prompts and OK/Cancel for informational messages.
Avoid overusing message boxes
Be selective about when you use message boxes in your macros. Too many message boxes can be disruptive and frustrating for users. Consider using other methods like writing to the status bar or using a progress indicator for non-critical messages.
Use clear button text
Make sure the button text in your message boxes clearly communicates the action that will be taken if the button is clicked. Avoid generic labels like “OK” if a more specific label would be clearer.
Consider accessibility
When designing message boxes, keep accessibility in mind. Use high-contrast colors and clear, legible fonts to ensure the message is readable for users with visual impairments. Also, consider providing keyboard shortcuts or alternative navigation methods for users who may not be able to use a mouse.
Test your message boxes
Be sure to thoroughly test your macros with the message boxes in place to ensure they work as expected and don’t cause any unintended behavior or errors. Test with different input values, screen sizes, and user scenarios to identify any potential issues.
Final Thoughts
The Excel VBA MsgBox function is useful for communicating with users in your macros, but sometimes you may want the message boxes to appear without pausing code execution. By using techniques like the vbApplicationModal argument, DoEvents, Application.OnTime, or custom UserForms, you can display messages to the user without causing interruptions to the macro flow.
When implementing message boxes, keep best practices like concise text, appropriate buttons and icons, accessibility, and thorough testing in mind. With some planning and thoughtful implementation, message boxes can be a valuable addition to your Excel VBA projects.
FAQs
What is the purpose of using MsgBox in Excel VBA?
Why does the MsgBox function pause macro execution by default?
What are some reasons to use MsgBox without pausing macro execution?
How can I use the vbApplicationModal argument with MsgBox?
MsgBox "Your message", vbInformation + vbApplicationModal
. This will display the message box modally, but the macro will continue executing without pausing.Are there any other alternatives to using MsgBox for displaying messages in Excel VBA?
- Writing messages to the status bar using
Application.StatusBar
- Displaying messages in a worksheet cell
- Using a custom UserForm for more flexibility and control over the message appearance and behavior

Vaishvi Desai is the founder of Excelsamurai and a passionate Excel enthusiast with years of experience in data analysis and spreadsheet management. With a mission to help others harness the power of Excel, Vaishvi shares her expertise through concise, easy-to-follow tutorials on shortcuts, formulas, Pivot Tables, and VBA.