Stop Using Add-Ins — The Only Outlook Macro Trick You Need for Email Automation
By Rachel Torres
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
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.)
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.)
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.
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.
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 coaches teams on email management and digital communication best practices. She has trained over 5