How to write useful macros in Outlook 2016 and 2019 messages?

In Microsoft Office, we use Visual Basic for Applications (VBA) for creating custom programs that enhance Office’s basic functionality and help save time by automating repetitive tasks. We refer to these small VBA programs as Macros.

In this tutorial, we wanted to provide the web’s most complete Macro development resource for Outlook. We will focus on exploring the basics of Outlook VBA for beginners, learn to write macros and then look into some more advanced useful macro ideas. Based on feedback we got, after going though this tutorial, you should be able to develop and run simple VBA macros for Outlook.

  • Basics first: We’ll learn how to insert and save a simple custom VBA macro into an active Outlook Session.
  • We’ll then set up the macro development environment in our computer.
  • We’ll go through the most basic examples of Outlook VBA. This will help you to grasp the Macro development basics and allow you to write simple macros.
  • Next, we’ll go ahead and define a shortcut icon for our macro in the Quick Access Toolbar. This will allow the us to run the macro with ease.
  • And we’ll finish by enabling Outlook macros and handling their security settings to ensure that the code will actually run when prompted in our computers.

Can i record an Outlook Macro?

Unlike other Office apps, Outlook does not offer a simple Macro recorder to capture user actions and auto-generate the required VBA code for us in the background. Therefore, if we want to add our own custom functionality to Outlook, we’ll need to learn to write simple VBA programs and incorporate them into our Outlook session.

Note: If you are interested to know how the Office macro recorder actually works, i would recommend to look into the MS Word Macros and Excel VBA Macro tutorials.

Writing VBA Macros in Outlook

  1. First off, open Microsoft Outlook.
  2. Now, go ahead and hit the Alt button + F11.
  3. The VBA developer Integrated Development Environment (IDE) will be opened.
  4. Expand the project tree until the ThisOutlookSession node.
  5. Right click ThisOutlookSession and then hit Insert.
  6. You’ll now going to inset a Visual Basic module. To accomplish that, go ahead and select Module.
  7. Paste your VBA code into the Module window.
  8. Hit File then select Save.
  9. Go ahead and close the Developer environment. This will bring you back to your Outlook user interface.

Note: Read on for some simple code examples to get you started with VBA. Never copy VBA code from unknown resources.

How to setup the developer tab in Outlook?

If you’ll be frequently developing Outlook Macros, you may want to set up your Office development environment. Sounds fancy isn’t it? Actually it’s quite a simple procedure. Read on for the details:

  1. Open Outlook, right click on the upper Ribbon area and select Customize the Ribbon.
2015-08-23 20_43_49-Inbox - - Outlook
  1. Check the Developer entry and hit OK.
2015-08-23 20_44_44-Outlook Options
  1. Now you will find the Developer menu in the Ribbon.

Useful Outlook VBA examples

Create an email message

This simple snippet creates a new email message item programmatically.

The script starts by creating an Outlook mail item, then it sets the to, subject, body text and CC fields. Finally it displays the message in Outlook so you can review and send it manually.

Public Sub CreateMail()
Dim MyEmail As MailItem
' Create a new Outlook message item programatically
Set MyEmail = Application.CreateItem(olMailItem)
'Set your new message to, subject, body text and cc fields.
With MyEmail
.To = ""
.Subject = "Insert your message subject here"
.Body = "Insert your email text body here"
.CC = ""
End With
End Sub

Advanced Note: You are able to use predefined Outlook templates when defining new emails with VBA. In order to do that, you’ll need to leverage the method CreateItemFromTemplate and specify the location of your Outlook template file (*. oft ).


Send an email programmatically

If you want Outlook to send out the email you have just created automatically, you can add the following line to the code posted above. Paste the following line before the End Sub statement of the previous snippet.



Attach a file to an email

In many instances you would like to automate sending an email with a file attached to it. This could be a Word document, Excel spreadsheet, Powerpoint presentation, PDF documents etc’. If you want to send an email with attachments programmatically, use this code:

#VBA Code
Dim MyEmail As MailItem
' Create a new Outlook message item programatically
Set MyEmail = Application.CreateItem(olMailItem)

'Define your attachment folder path and file name - modify this part as needed
Dim AttachFolder, AttachFile As String
AttachFolder = "C:\"
AttachFile = "test.txt"

'Set your new message to, subject, body text and cc fields.
With MyEmail

.To = ";"
.Subject = "This is your message subject"
.Body = "Insert your email text body here"
.CC = ""
.Attachments.Add AttachFolder & AttachFile

End With


End Sub


  • Please ensure that you set the correct path and attachment file name in the snippet.
  • In this example i have set multiple recipients to the email, kindly adjust as required.

Create a task with VBA

The following snippet creates an Outlook task, assigns it to another individual and sets the task subject and body text.

Public Sub CreateTask()

Dim MyTask As TaskItem
' Create a new Outlook task
Set MyTask = Application.CreateItem(olTaskItem)

'Set your new task recipients and information fields
With MyTask
.Recipients.Add ""
.Subject = "This is your task subject"
.Body = "Insert a thorough explanation of your task here."

End With


End Sub

Save as HTML

Few readers asked how to automate saving emails to HTML. The code below accomplishes exactly that.

Public Sub SaveAsHTML()
 On Error Resume Next
 Dim MyWindow As Outlook.Inspector 
Dim MyItem As MailItem 
Dim FilePath As String FilePath = Environ("HOMEPATH") & "\Documents\" & "\" 
Dim ItemName As String 
Set MyWindow = Application.ActiveInspector 
If TypeName(MyWindow) = "Nothing" Then MsgBox ("Kindly open an email to save") 
Set MyItem = MyWindow.CurrentItem 
ItemName = MyItem.Subject ' File name will be identical to the message subject 
With MyItem 
.SaveAs FilePath & ItemName & ".html", olHTML 
End With 
End If 
End Sub

Note: Ensure that you launch this code only on emails that are open in Outlook (not in the Inbox/Explorer view).

Outlook Macros related questions

Where are Macros stored in Outlook?

You might be wandering where exactly your used Macro is stored. Well, unlike in Excel for example, which allows you to store macros in the personal.xlb file or in specific spreadsheets; all Microsoft Outlook macros are stored in one global file in your file system. Specifically, the file storing all you Macros is named VBAProject.otm. The file can be found at: C:\users\<your_user_name>\AppData\Roaming\Microsoft\Outlook.

Shortcut button for Outlook macros

Our next step is to insert a small shortcut button which will allow us to easily run the macro. For simplicity, we’ll insert this button to the Quick Access toolbar.

  1. Open Microsoft Outlook, if it’s not opened yet.
  2. Right click on the upper Outlook Ribbon and select Customize the Quick Access Toolbar.
2015-08-23 20_56_38-Inbox - - Outlook

       Note: You can use a similar procedure to place your icon in the Ribbon itself instead of in the Quick Access Toolbar.

  1. Hit the  ‘Choose commands from‘ combo box and select Macros.
2015-08-23 20_57_52-Outlook Options
  1. Select the macro you just created and hit Add.
2015-08-23 21_00_05-Outlook Options
  1. Hit Modify to define a custom icon picture for your Quick access toolbar button.
2015-08-23 21_01_18-Outlook Options
  1. When done, hit OK.

How to enable a macro in Outlook?

This step is optional and should be followed only if you receive an error message when running your newly created macro.

  1. Next is to allow Outlook to run our VBA macro. By default, Microsoft Office disables macros and doesn’t allow them; so we’ll need to define the proper macro security to allow your custom Outlook macro to run.
  2. In Outlook 2016, click on Developer in the ribbon and select Macro security.
2015-08-23 21_03_18-Inbox - - Outlook
  1. Select your Macro security settings.
    1. In Outlook 2016: Select Notifications for only digitally signed macros, all other disabled or Notifications for all macros .
    2. In Outlook 2019: Select Disable All Macros with Notification. This will post a warning message requiring user approval before your macro runs.
  2. After setting your Macro security settings, hit OK.

Note: Your current security settings might prevent Macros from running in Outlook. Here’s a tutorial on how to proceed if Macros are disabled in your Outlook Macro project.

How to use your Outlook macro?

Last but definitely not least, now it’s time to run your newly created macro.

  1. Navigate to the Quick Access toolbar (upper left hand side of the screen – slightly above the HOME menu).
  2. Hit the icon you have assigned to your macro.
  3. Voi’la, you have just completed and run your (first) Outlook VBA macro!

Additional Outlook Macros ideas

Several of our readers asked whether we could specify further ideas for Outlook Automation. Here are a few ones to get started.

  1. Automatically save attachments in incoming messages into a specific folder.
  2. Read a list of appointments entries from a CSV file and automatically create appointments in one or more calendars.
  3. Automatic task/meeting/contact creation out of incoming emails.
  4. Visualize status of attendees response status to a set of recurring meetings.
  5. Send Outlook emails from Excel, Word or Access.
  6. Download all attachments from a specific Outlook folder into your computer. If your Outlook Account space is limited, you could use this macro to specifically download only large attachments (over 5Mb for instance) to your disk, instead of managing them in Outlook.
  7. Export Outlook contacts directly into an Access database. Note that Export contacts to CSV is available in the product.
  8. Automatically update meeting information for individual or recurring appointments.

5 thoughts on “How to write useful macros in Outlook 2016 and 2019 messages?”

  1. Are you finding that the ‘Notifications for digitally signed macros’ and ‘Notifications for all macros’ settings are not working in Outlook 2016?

    I only seem to be able to get my macro (which is self-signed) to run with ‘enable all macros’ on. #

    Worked fine in Outlook 2013, can’t seem to get it to work in 2016.

    Can’t figure out if bug in Outlook 2016 or not.

  2. If this isn’t the right spot to post please refer me where but how would I create a macro that uses an outlook signature so that I can create a button that will add the signature to a reply or forwarded email and also add a file attachment?

  3. Hi,
    Could you send us an exemple of macro in outlook saving joined file in e specific directory like c:\mydir.
    Thanks in advance for your help

  4. Thanks for a excellent explanation. Is there a way to assign a keyboard shortcut? Tried to search around but it looks like its no solution?

Leave a Comment