Stop Using Add-Ins — The Only Outlook Macro Trick You Need for Email Automation

Most Outlook tutorials tell you to install third-party add-ins or pay for automation tools to handle repetitive email tasks. They're wrong. Add-ins slow down Outlook, break after updates, and often can’t access your mailbox structure the way native VBA macros can. And yet — most people never touch macros because they assume it’s too technical, too risky, or too buried in Outlook’s interface. It isn’t. In fact, the core process hasn’t changed since Outlook 2010 — just where Microsoft hides the buttons.

Quick Answer

You create an Outlook macro by enabling the Developer tab (File > Options > Customize Ribbon > check 'Developer'), then opening the Visual Basic Editor (Alt+F11), inserting a new module (Insert > Module), pasting VBA code, and running it with Alt+F8. That’s it — no downloads, no subscriptions, no admin approval needed on most desktop installs.

Step-by-Step Walkthrough

  1. Enable the Developer tab: Go to File > Options > Customize Ribbon. In the right pane, under 'Main Tabs', check the box next to Developer. Click OK. (Outlook 365 and 2019 do this the same way. Outlook 2016 requires the same path — but if you don’t see 'Customize Ribbon', click 'Customize the Ribbon' at the bottom of the list first.)
  2. Open the Visual Basic Editor: Click the Developer tab, then click Visual Basic. Or use the keyboard shortcut Alt+F11. (Yes — this shortcut works even if the Developer tab is hidden. I’ve seen users restart Outlook three times trying to find this button before remembering the shortcut.)
  3. Create a new module: In the Project Explorer (left pane), double-click NormalProject (not 'ThisOutlookSession' unless you want the macro to run automatically on startup). Then go to Insert > Module. A blank window opens — that’s where you paste your code.
  4. Paste and edit your macro: For example, here’s a simple macro that creates a new email pre-addressed to your manager and inserts a standard weekly update template:
    Sub SendWeeklyUpdate()
        Dim olApp As Outlook.Application
        Dim olMail As Outlook.MailItem
        Set olApp = Outlook.Application
        Set olMail = olApp.CreateItem(olMailItem)
        With olMail
            .To = "priya.sharma@alibaba.com"
            .CC = "michael.rodriguez@alibaba.com"
            .Subject = "Weekly Update – " & Format(Date, "mm/dd/yyyy")
            .Body = "Hi Priya,\n\nHere’s what I shipped this week:\n\n1. \n2. \n3. \n\nNext steps:"
            .Display
        End With
    End Sub
    You can change the email addresses, subject line, or body text directly in this window. No compiling required.
  5. Save and test: Press Ctrl+S to save the NormalProject. Then press Alt+F8, select SendWeeklyUpdate, and click Run. A new message window opens — ready to send. Done.

How to create a macro in outlook for email

The example above *is* how to create a macro in Outlook for email — but let’s clarify what makes email-specific macros different. They rely on Outlook.MailItem, not Outlook.AppointmentItem or Outlook.ContactItem. You’ll see the object type in the CreateItem() line. If you’re building something that acts on selected messages (e.g., “move all selected emails to ‘Follow Up’ folder”), you’ll use Application.ActiveExplorer.Selection instead of CreateItem. We’ll cover that in Pro Tips.

How to add a macro in outlook / How to add macro to outlook / How to add macros in outlook

Adding a macro isn’t like installing software. You’re not “adding” anything external — you’re saving VBA code inside Outlook’s built-in NormalProject file. That file lives at:
  • Outlook 365 / 2019: %appdata%\Microsoft\Outlook\VbaProject.OTM
  • Outlook 2016: Same path, but sometimes locked down by Group Policy
So “how to add a macro” really means “how to paste and save code in the correct module.” There’s no ‘Add Macro’ button anywhere. If you see one online, it’s either outdated or pointing to an add-in — which defeats the whole point.

Common Pitfalls

  • You saved in ‘ThisOutlookSession’ but expected it to appear in Alt+F8: Macros only show in the macro dialog if they’re public Subs in a standard module — not inside class modules or ThisOutlookSession unless they’re explicitly declared Public and have no parameters. I’ve seen this trip up even experienced users.
  • Macro security blocked it silently: Outlook disables macros by default. Go to File > Options > Trust Center > Trust Center Settings > Macro Settings and choose Notifications for all macros (not recommended; potentially dangerous code). Yes — it’s wordy, and yes — it’s the only way to run custom macros without signing them. (More on signing in Pro Tips.)
  • You typed ‘SendWeeklyUpdate()’ with parentheses in Alt+F8: Don’t. Just type the name: SendWeeklyUpdate. Parentheses mean you’re calling it as a function — and Alt+F8 only lists Sub procedures.
  • You tried this in Outlook for Mac or Outlook on the web: It won’t work. VBA macros only run in desktop Outlook on Windows. Outlook for Mac uses AppleScript or JavaScript API (a completely different world). Outlook Web App has zero macro support — ever.

Pro Tips

Assign a macro to a Quick Access Toolbar button

Instead of hunting for Alt+F8 every time: right-click any toolbar > Customize Quick Access Toolbar > choose Macros from the left dropdown > select your macro > click Add >> . Now it’s one click away — even faster than Alt+F8.

Use Application.ItemSend to auto-modify outgoing mail

Paste this into ThisOutlookSession (not a standard module) to auto-add a disclaimer to every sent email:
Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    If TypeOf Item Is Outlook.MailItem Then
        Dim mail As Outlook.MailItem
        Set mail = Item
        mail.Body = mail.Body & vbCrLf & vbCrLf & "— Sent from Outlook macro. Not reviewed by legal."
    End If
End Sub
Note: This only works if macros are enabled *and* the project is signed or trusted. Which brings us to the surprising tip...

The surprising tip: You don’t need a certificate to sign your own macros

You *can* self-sign with SelfCert.exe (built into Windows). Search for ‘selfcert’ in Start, run it, give your cert a name (e.g., ‘Alibaba-Macros’), then go back to VB Editor > Tools > Digital Signature > Choose. Once signed, Outlook stops nagging — even on high-security profiles. This took me three days to figure out originally. Microsoft buries SelfCert.exe deep, but it’s there.

Troubleshooting

If your macro doesn’t appear in Alt+F8 or throws ‘Compile Error’, check these first:
  • Outlook version mismatch: Outlook 365 (Monthly Channel) fully supports all VBA objects listed above. Outlook 2016 LTSC and Outlook 2019 work fine — but some enterprise builds disable VBA entirely via Group Policy (DisableItemsInUserInterface). If you’re on a corporate laptop and Alt+F11 does nothing, ask IT whether VBA is disabled.
  • You’re using Outlook in compatibility mode: Right-click the Outlook shortcut > Properties > Compatibility tab. If ‘Run this program in compatibility mode’ is checked, uncheck it. VBA fails unpredictably in XP/7 mode.
  • Your macro references Outlook objects not available in older versions: For example, olFolderRssFeeds doesn’t exist in Outlook 2016. Stick to olFolderInbox, olFolderSentMail, and olMailItem if you need cross-version safety.

Which method fits your situation?

Your Situation Best Method Why
You send the same status email every Friday Standard module + Alt+F8 or QAT button Fast, safe, no auto-run risk
You want to auto-add signatures to replies ThisOutlookSession + Application_ItemSend Runs only when sending — no extra clicks
You need to move 50+ flagged emails to a folder Standard module + Selection loop Processes only what’s selected — no accidental bulk moves
You’re on a shared terminal with strict IT policy Don’t use macros — use Quick Steps or Rules VBA will be blocked; Quick Steps are allowed and almost as fast
You want to run macros on mobile or web Not possible — use Power Automate + Outlook connector VBA is Windows-only desktop tech. No workaround.
You manage 20+ colleagues’ Outlook setups Deploy signed VbaProject.OTM via SCCM or Intune Avoids per-user setup; ensures consistency and trust
Rachel Torres

Rachel Torres

Rachel coaches teams on email management and digital communication best practices. She has trained over 5