By default, you can only run a rule in one folder at a time. In this article, we’ll teach you how to utilize a piece of VBA code to run a specific rule in all mail folders.
Outlook permits users to run rule manually. You can just access “Rules and Alerts” dialog box and hit “Run Rules Now” button. In the subsequent dialog box, select a specific rule and choose a folder in which you desire to run this rule. But, if you would like to quickly run a rule in all mail folders, you can use the following VBA code.
Quickly Run a Specific Rule in All Mail Folders
- In the first place, start your Outlook program.
- Then in the main Outlook window, press “Alt + F11” key buttons.
- Next in the emerging “Microsoft Visual Basic for Applications” window, you should open a not-in-use module.
- Subsequently, copy the VBA code below into this module window. Plus, you should change some lines based on your own case, such as the rule name.
Sub RunSpecificRule_AllMailFolders()
Dim objStores As Outlook.Stores
Dim objStore As Outlook.Store
Dim objPSTFile As Outlook.Folder
Dim objFolders As Outlook.folders
Dim objFolder As Object
Set objStores = Outlook.Application.Session.Stores
'Process all Outlook PST files in your Outlook
For Each objStore In objStores
Set objPSTFile = objStore.GetRootFolder
For Each objFolder In objPSTFile.folders
Call ProcessFolders(objFolder)
Next
Next
MsgBox "Complete!", vbExclamation + vbOKOnly, "Run Rule "
End Sub
Sub ProcessFolders(ByVal objCurrentFolder As Outlook.Folder)
Dim objRules As Outlook.Rules
Dim objRule As Outlook.Rule
Dim objSubfolder As Outlook.Folder
Set objRules = Outlook.Application.Session.DefaultStore.GetRules
'Change the rule name as per your actual case
Set objRule = objRules.Item("Move Mails to Temp")
On Error Resume Next
'Only work on non-empty Mail folder
If objCurrentFolder.Items.count > 0 And objCurrentFolder.DefaultItemType = olMailItem Then
With objRule
.Enabled = True
.Execute ShowProgress:=True, Folder:=objCurrentFolder, IncludeSubfolders:=True
End With
End If
'Process subfolders recursively
If objCurrentFolder.folders.count > 0 Then
For Each objSubfolder In objCurrentFolder.folders
Call ProcessFolders(objSubfolder)
Next
End If
End Sub
- After that, you should check your Outlook macro settings, ensuring macro is permitted.
- Eventually you can have a try.
- Just click into the “RunSpecificRule_AllMailFolders” subroutine.
- Then press F5 key button to trigger this code.
- Next the macro will run immediately.
- After it completes, you will get a message, like the following screenshot. It refers to the rule has finished.
Watch out for Malicious Macros
As we all know, malicious emails have become increasingly rampant. Such emails often carry with malicious macros. Thus, if you set your Outlook macro security level to low, you have to beware of the hidden viruses and malware. Moreover, it’s prudent to get hold of a powerful PST fix tool, such as DataNumen Outlook Repair. It is able to repair PST file and extract maximum data for you without breaking a sweat.
Author Introduction:
Shirley Zhang is a data recovery expert in DataNumen, Inc., which is the world leader in data recovery technologies, including recover mdf and outlook repair software products. For more information visit www.datanumen.com


