The Problem (Q-score 4, ranked #3rd of 3 in the Outlook VBA archive)
The scenario as originally posted in 2008
Is there any way that I can remove the Print item from the context menu when you right-click on an email with VBA?
I am forever right-clicking to reply to an email, only to accidentally click Print and have Outlook send it directly to the printer quicker than I can stop it.

NB: I am using Outlook 2007.
Why community consensus is tight on this one
Across 3 Outlook VBA entries in the archive, the accepted answer here holds niche answer (below median) status — meaning voters are unusually aligned on the right fix.
The Verified Solution — niche answer (below median) (+7)
31-line Outlook VBA pattern (copy-ready)
Based on the link TcKs provide, that was pretty simple.
In the example below I check the type of the item so that it only affects e-mails and not calendar items.
To enter the code in outlook, Type Alt + F11, then expand the Microsoft Office Outlook Objects in the Project pane. Then double click the ThisOutlookSession. Then paste this code into the code window. I don’t like to check captions like this as you can run into issues with internationalization. But I didn’t see an ActionID or anything on the Command. There was a FaceID but that is just the id of the printer icon.
Private Sub Application_ItemContextMenuDisplay(ByVal CommandBar As Office.CommandBar, ByVal Selection As Selection)
Dim cmdTemp As Office.CommandBarControl
If Selection.Count > 0 Then
Select Case TypeName(Selection.Item(1))
Case "MailItem"
For Each cmdTemp In CommandBar.Controls
If cmdTemp.Caption = "&Print" Then
cmdTemp.Delete
Exit For
End If
Next cmdTemp
Case Else
'Debug.Print TypeName(Selection.Item(1))
End Select
End If
End Sub
Loop-performance notes specific to this pattern
The loop in the answer iterates in process. On a 2026 Office build, setting Application.ScreenUpdating = False and Application.Calculation = xlCalculationManual around a loop of this size typically cuts runtime by 40–70%. Re-enable both in the Exit handler.
When to Use It — vintage (14+ years old, pre-2013)
A top-10 Outlook VBA pattern — why it still holds up
Ranks #3rd of 3 in the Outlook VBA archive. The only pattern ranked immediately above it is “MS Outlook macro to strikeout selected text” — compare both if you’re choosing between approaches.
What changed between 2008 and 2026
The answer is 18 years old. The Outlook VBA object model has been stable across Office 2013, 2016, 2019, 2021, 365, and 2024/2026 LTSC, so the pattern still compiles. Changes that might affect you: 64-bit API declarations (use PtrSafe), blocked macros in downloaded files (Mark-of-the-Web), and the shift toward Office Scripts for web-first workflows.