• Outlook User
  • New Outlook app
  • Outlook.com
  • Outlook Mac
  • Outlook & iCloud
  • Developer
  • Microsoft 365 Admin
    • Common Problems
    • Microsoft 365
    • Outlook BCM
    • Utilities & Addins

Enable or Disable an Outlook Rule using Reminders

Slipstick Systems

› Developer › Enable or Disable an Outlook Rule using Reminders

Last reviewed on September 16, 2019     45 Comments

Applies to: Outlook (classic), Outlook 2007, Outlook 2010

The ability to use VBA to control Outlook's rules was added to Outlook 2007. For this reason, this macro will not work with Outlook 2003 or older.

In the enable and disable macro, replace "Your Rule Name" with the name of the rule you want to enable and disable.
Enter the name of the rule in the VBA code
Set olRule = olRules.Item("Your Rule Name")

To use: Create a task with the subject "Disable Rule" and set the reminder time for the time you want the rule to be disabled. Create a second task with the subject "Enable Rule" with the reminder time set for the time you want it enabled.

This, of course, only works if Outlook is running. It is not possible to enable and disable rules when Outlook is closed.

VBA code sample to enable or disable rules

Use Alt+F11 to open the VBA Editor and place this code in ThisOutlookSession.

If you prefer to use Appointments instead of Tasks, replace IPM.Task with IPM.Appointment. If you are using recurring events to turn the rule off and on, an appointment might be better as the reminder is less likely to be accidentally disabled.

Private Sub Application_Reminder(ByVal Item As Object)

If Item.MessageClass <> "IPM.Task" Then
  Exit Sub
End If

If Item.Subject = "Enable Rule" Then
  Enable_Run_Rule
End If

If Item.Subject = "Disable Rule" Then
 Disable_Run_Rule
End If

End Sub

' Macro to enable a rule
Sub Enable_Run_Rule()
Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule
Dim intCount As Integer
Dim blnExecute As Boolean
 
    Set olRules = Application.Session.DefaultStore.GetRules
    Set olRule = olRules.Item("Your Rule Name")
    olRule.Enabled = True
    If blnExecute Then olRule.Execute ShowProgress:=True
     olRules.Save
  
    Set olRules = Nothing
    Set olRule = Nothing
End Sub

' Macro to disable a rule
Sub Disable_Run_Rule()
Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule
Dim intCount As Integer
Dim blnExecute As Boolean
 
    Set olRules = Application.Session.DefaultStore.GetRules
    Set olRule = olRules.Item("Your Rule Name")
    olRule.Enabled = False
    If blnExecute Then olRule.Execute ShowProgress:=True
       olRules.Save
  
    Set olRules = Nothing
    Set olRule = Nothing
End Sub

 

Use with multiple rules

To apply this to multiple rules, assign categories called Enable Rule or Disable Rule to a task and use the rule name as the task subject. Use an If... then statement in the VBA to check for the category and pass the rule name to a function.

In the following code, I condensed it to one function that gets the rule name and whether the rule should be enabled or disabled, passing both values to the function.

Private Sub Application_Reminder(ByVal Item As Object)
Dim strRule As String

If Item.MessageClass <> "IPM.Task" Then
  Exit Sub
End If

strRule = Item.Subject

If Item.Categories = "Enable Rule" Then
Run_Rule strRule, 1
End If

If Item.Categories = "Disable Rule" Then
Run_Rule strRule, 0
End If

End Sub

Function Run_Rule(rule_name As String, tf As Boolean) As Boolean
Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule
Dim blnExecute As Boolean

    Set olRules = Application.Session.DefaultStore.GetRules
    Set olRule = olRules.Item(rule_name)
    
    olRule.Enabled = tf
    
    If blnExecute Then olRule.Execute ShowProgress:=True
     olRules.Save
  
    Set olRules = Nothing
    Set olRule = Nothing
End Function

Toggle the rule on or off

If you want to use one macro and toggle the rule on or off, you can change olRule.Enabled = True to

If olRule.Enabled = True then
    olRule.Enabled = False
Else 
    olRule.Enabled = True

More Information

Enable / Disable rules code sample from Outlook Code.com
Run Rules Now using a Macro
VBA to Sort Rules [A-Z] - code provided

Enable or Disable an Outlook Rule using Reminders was last modified: September 16th, 2019 by Diane Poremsky

Related Posts:

  • Run Rules Now using a Macro
  • Creating an AND rule in Outlook Rules
  • Disable New Mail Notifications for Some Accounts
  • Disable Outlook's No Subject Warning using VBA

About Diane Poremsky

A Microsoft Outlook Most Valuable Professional (MVP) since 1999, Diane is the author of several books, including Outlook 2013 Absolute Beginners Book. She also created video training CDs and online training classes for Microsoft Outlook. You can find her helping people online in Outlook Forums as well as in the Microsoft Answers and TechNet forums.

Subscribe
Notify of
45 Comments
newest
oldest most voted
Inline Feedbacks
View all comments

Jane Wilkinson (@guest_219658)
August 22, 2022 12:13 pm
#219658

A total newbie. I have done what you say at the start but I am confused as to how the marco will know what rule to run if I apply it to multiple reminders. Also once I have created the macro what do I do then?

0
0
Reply
Binu Mathew (@guest_219202)
April 13, 2022 6:53 am
#219202

Thank you very much

0
0
Reply
Marius (@guest_217913)
April 15, 2021 9:46 am
#217913

Hi, sorry for asking a newbie question. I have entererd your macro 1:1 in my outlook 2019. The macro doesnt start either. If i start it in the VBA editor there is a error missing object. How can i solve this problem?
Thanks and regards Marius

0
0
Reply
Darin (@guest_209933)
January 11, 2018 9:50 am
#209933

hi! I'm a beginner :) but was looking to try and create a macro that would turn on or off a specific rule based on my input (I would then assign that Macro to a toolbar in the ribbon) Anyone created that previously per chance?

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Darin
February 13, 2018 9:25 am
#210337

Do you want to call the macro from a button? The macros named Sub Enable_Run_Rule() and Sub Disable_Run_Rule() that are part of the reminder macro can be run manually.

0
0
Reply
Vidar (@guest_209566)
December 5, 2017 2:59 am
#209566

Hello! I know this is an old post, but I hope someone can help me out anyway.

I have created the following:
- a rule called "TEST-OOO"
- the Enable and Disable appontments with reminders
- the VBA, changing "Your Rule Name" to "TEST-OOO" and replacing IPM.Task with IPM.Appointment

The Enable reminder shows at the time set, but the rule is not enabled.

What have I misunderstood? Do I need to do something else?

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Vidar
December 6, 2017 12:25 am
#209579

To the best of my recollection, that should work. What version and build of Outlook? I know Outlook 2016 tightened some security around rules but i didn't think it affected this.

Add some MsgBox at various points to see if they come up, starting with the enable and disable functions. Add a message box in the Enable_Run_Rule and disable subs too - somewhere near the top.
If Item.Subject = "Enable Rule" Then
MsgBox "Enable Rule fired"
Enable_Run_Rule
end if

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Diane Poremsky
December 6, 2017 12:32 am
#209581

I just tested it here in Outlook 2016, it is working.

0
0
Reply
Vidar (@guest_209659)
Reply to  Diane Poremsky
December 15, 2017 6:02 am
#209659

Dear Diane,

I tried to write you an answer, but I believe the message got "hung" somewhere...

Thank you for your prompt reply, it was very helpful. I was using Outlook 2010 and couldn't get it to work. But when I switched to a computer with Outlook 2016 it worked like a charm :)

But I encountered another "challenge" that you can possibly assist with.

For the auto reply rule I used the "reply using a specific template" option. This apparently only sends out the auto reply once for each sender. I would very much like it to send the auto reply every time for every sender, regardless of how many emails i receive from the sender.

Is is possible to achieve this somehow?

Thank you for your assistance, it is highly appreciated :)

Regards, Vidar

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Vidar
December 23, 2017 12:16 am
#209756

It's 'hung' in the moderation queue - i leave everything there until i have time to reply, as it makes it easier to find the messages that need answered.

Reply with template is one per sender until outlook is restarted. if you use a run a script macro to send the template, it will reply to all messages from the sender.
https://www.slipstick.com/developer/run-a-script-rule-autoreply-using-a-template/

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Vidar
December 6, 2017 12:28 am
#209580

Oh, did you put it in thisoutlooksession? Because its triggered automatically, it needs to be in thisoutlooksession, not a module. Also, i'm assuming you set macro security to low for testing?

0
0
Reply
Vidar (@guest_212127)
Reply to  Diane Poremsky
October 24, 2018 2:16 am
#212127

Dear Diane,

First of all, thank you for this nice solution. It has really helped me a lot!

Most of the time the Outlook rule gets enabled/disabled as it should. However, it happens from time to time that the rule is NOT enabled/disabled.

I don't know the reason for this, but I would like to not having to check this manually twice a day.

Is there a way to have Outlook send me an email every time the rule is actually enabled/disabled, just to let me know everything is as it should be?

Thank you for all your assistance, it is much appreciated :)

Regards, Vidar

0
0
Reply
Diane Poremsky(@diane-poremsky)
Author
Reply to  Vidar
October 25, 2018 6:38 pm
#212156

Sure. Use the macro at https://www.slipstick.com/developer/create-a-new-message-using-vba/ - removing the fields you don't need. You can use the macro with both enable/disable. Change .display to .send. You can call the macro after rule is changed. If Item.Subject = "Disable Rule" Then Disable_Run_Rule End If CreateNewMessage End Sub Or put this at the end, instead of the macro name: Dim objMsg As MailItem Set objMsg = Application.CreateItem(olMailItem) With objMsg .To = "Alias@domain.com" .Subject = item.subject .Body= item.subject .Send End With Set objMsg = Nothing This will only tell you if the macro ran - it doesn't confirm the change was made. It will be possible to get the status after the it runs, so you know if the macro worked. Something like this, but i didn't test it so it might not be quite right. Basically, we want to get the status if the rule, on or off and put the value in the body. It will either be a 1 or 0. Use it with the first example. Public Sub CreateNewMessage() Dim objMsg As MailItem Dim olRules As Outlook.Rules Dim olRule As Outlook.Rule Dim intCount As Integer Dim blnExecute As Boolean Set olRules = Application.Session.DefaultStore.GetRules Set olRule = olRules.Item("Your Rule Name")… Read more »

0
0
Reply
Dean (@guest_183817)
June 6, 2014 12:03 am
#183817

Hi,

I'm looking to implement this as a button on a toolbar. While i can create a toolbar, can you help get a link between the macro and a button?

thanks

0
0
Reply
Diane Poremsky (@guest_184030)
Reply to  Dean
June 15, 2014 11:34 pm
#184030

What version of outlook? In 2010 and 2013 you select the macro in the customize ribbon dialog. In 2007, you add the macro to the QAT. In older versions you customize the toolbar and add the macro to it.

0
0
Reply
Jacob Mabb (@guest_183662)
May 27, 2014 7:37 am
#183662

On exchange 2007, I used 2 powershell scheduled tasks (One to enable, one to disable). The powershell scheduled tasks must be run as the mailbox user, however, this does NOT require the user to be logged into the machine or outlook to be running. It launches outlook for that user at the time of the scheduled task and enables/disables the rule.

#Enable Rule Script
$ol = New-Object -ComObject Outlook.Application
$ol.visible = $true
$namespace = $ol.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$rules = $namespace.DefaultStore.GetRules()
$rule = $rules | Where-Object { $_.Name -eq "" }
$rule.Enabled = $True
$rules.Save()

#Disable Rule Script
$ol = New-Object -ComObject Outlook.Application
$ol.visible = $true
$namespace = $ol.GetNamespace("MAPI")
$inbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderInbox)
$rules = $namespace.DefaultStore.GetRules()
$rule = $rules | Where-Object { $_.Name -eq "" }
$rule.Enabled = $False
$rules.Save()

0
0
Reply
Jacob Mabb (@guest_183663)
Reply to  Jacob Mabb
May 27, 2014 7:39 am
#183663

$rule = $rules | Where-Object { $_.Name -eq "" }

You must put the name of the rule between these double-quotes.

0
0
Reply
Christopher (@guest_180878)
December 17, 2013 3:00 am
#180878

The rules work individually but not the appointment one. regards the "schema_" I try to use it when I receive a notice that I've got an appointment

0
0
Reply

Visit Slipstick Forums.
What's New at Slipstick.com

Latest EMO: Vol. 30 Issue 16

Subscribe to Exchange Messaging Outlook






Support Services

Do you need help setting up Outlook, moving your email to a new computer, migrating or configuring Office 365, or just need some one-on-one assistance?

Our Sponsors

CompanionLink
ReliefJet
  • Popular
  • Latest
  • Week Month All
  • Use Classic Outlook, not New Outlook
  • How to Remove the Primary Account from Outlook
  • Disable "Always ask before opening" Dialog
  • Adjusting Outlook's Zoom Setting in Email
  • This operation has been cancelled due to restrictions
  • How to Hide or Delete Outlook's Default Folders
  • Reset the New Outlook Profile
  • Save Attachments to the Hard Drive
  • Add Attachments and Set Email Fields During a Mail Merge
  • Outlook SecureTemp Files Folder
  • Open Outlook Templates using PowerShell
  • Count and List Folders in Classic Outlook
  • Google Workspace and Outlook with POP Mail
  • Import EML Files into New Outlook
  • Opening PST files in New Outlook
  • New Outlook: Show To, CC, BCC in Replies
  • Insert Word Document into Email using VBA
  • Delete Empty Folders using PowerShell
  • Warn Before Deleting a Contact
  • Classic Outlook is NOT Going Away in 2026
Ajax spinner

Recent Bugs List

Microsoft keeps a running list of issues affecting recently released updates at Fixes or workarounds for recent issues in classic Outlook (Windows).

For new Outlook for Windows: Fixes or workarounds for recent issues in new Outlook for Windows .

Outlook for Mac Recent issues: Fixes or workarounds for recent issues in Outlook for Mac

Outlook.com Recent issues: Fixes or workarounds for recent issues on Outlook.com

Office Update History

Update history for supported Office versions is at Update history for Office

Outlook Suggestions and Feedback

Outlook Feedback covers Outlook as an email client, including Outlook Android, iOS, Mac, and Windows clients, as well as the browser extension (PWA) and Outlook on the web.

Outlook (new) Feedback. Use this for feedback and suggestions for Outlook (new).

Use Outlook.com Feedback for suggestions or feedback about Outlook.com accounts.

Other Microsoft 365 applications and services




New Outlook Articles

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Google Workspace and Outlook with POP Mail

Import EML Files into New Outlook

Opening PST files in New Outlook

New Outlook: Show To, CC, BCC in Replies

Insert Word Document into Email using VBA

Delete Empty Folders using PowerShell

Warn Before Deleting a Contact

Classic Outlook is NOT Going Away in 2026

Newest Code Samples

Open Outlook Templates using PowerShell

Count and List Folders in Classic Outlook

Insert Word Document into Email using VBA

Warn Before Deleting a Contact

Use PowerShell to Delete Attachments

Remove RE:, FWD:, and Other Prefixes from Subject Line

Change the Mailing Address Using PowerShell

Categorize @Mentioned Messages

Send an Email When You Open Outlook

Delete Old Calendar Events using VBA

VBA Basics

How to use the VBA Editor

Work with open item or selected item

Working with All Items in a Folder or Selected Items

VBA and non-default Outlook Folders

Backup and save your Outlook VBA macros

Get text using Left, Right, Mid, Len, InStr

Using Arrays in Outlook macros

Use RegEx to extract message text

Paste clipboard contents

Windows Folder Picker

Custom Forms

Designing Microsoft Outlook Forms

Set a custom form as default

Developer Resources

Developer Resources

Developer Tools

VBOffice.net samples

SlovakTech.com

Outlook MVP David Lee

Repair PST

Convert an OST to PST

Repair damaged PST file

Repair large PST File

Remove password from PST

Merge Two Data Files

Sync & Share Outlook Data

  • Share Calendar & Contacts
  • Synchronize two computers
  • Sync Calendar and Contacts Using Outlook.com
  • Sync Outlook & Android Devices
  • Sync Google Calendar with Outlook
  • Access Folders in Other Users Mailboxes

Diane Poremsky [Outlook MVP]

Make a donation

Mail Tools

Sending and Retrieval Tools

Mass Mail Tools

Compose Tools

Duplicate Remover Tools

Mail Tools for Outlook

Online Services

Calendar Tools

Schedule Management

Calendar Printing Tools

Calendar Reminder Tools

Calendar Dates & Data

Time and Billing Tools

Meeting Productivity Tools

Duplicate Remover Tools

Productivity

Productivity Tools

Automatic Message Processing Tools

Special Function Automatic Processing Tools

Housekeeping and Message Management

Task Tools

Project and Business Management Tools

Choosing the Folder to Save a Sent Message In

Run Rules on messages after reading

Help & Suggestions

Submit Outlook Feature Requests

Slipstick Support Services

Buy Microsoft 365 Office Software and Services

Visit Slipstick Forums.

What's New at Slipstick.com

Home | Outlook User | Exchange Administrator | Office 365 | Outlook.com | Outlook Developer
Outlook for Mac | Common Problems | Utilities & Addins | Tutorials
Outlook & iCloud Issues | Outlook Apps
EMO Archives | About Slipstick | Slipstick Forums
Submit New or Updated Outlook and Exchange Server Utilities

Send comments using our Feedback page
Copyright © 2025 Slipstick Systems. All rights reserved.
Slipstick Systems is not affiliated with Microsoft Corporation.

wpDiscuz

Sign up for Exchange Messaging Outlook

Our weekly Outlook & Exchange newsletter (bi-weekly during the summer)






Please note: If you subscribed to Exchange Messaging Outlook before August 2019, please re-subscribe.

Never see this message again.

You are going to send email to

Move Comment