How to Run an Outlook Rule on Multiple Folders Including Subfolders
🔍 WiseChecker

How to Run an Outlook Rule on Multiple Folders Including Subfolders

Outlook rules let you automate email organization, but the built-in rule wizard only applies rules to the Inbox or a single folder. If you need the same rule to run across multiple folders and their subfolders, the standard interface does not provide this option directly. This limitation exists because Outlook rules are designed to work on a single folder trigger, not a folder hierarchy.

The root cause is that Outlook rules evaluate incoming mail against the folder where the rule is stored, typically the Inbox. When you move messages to other folders, the rule does not re-evaluate them. To run a rule on multiple folders including subfolders, you must use a combination of folder-level rules, manual scripting with VBA, or third-party tools. This article explains three reliable methods to apply a rule across multiple folders and their subfolders.

Key Takeaways: Run Outlook Rules Across Folder Hierarchies

  • VBA macro with Application.AdvancedSearch: Searches all specified folders and subfolders, then applies rule actions like Move or Delete to matching items.
  • Manual folder-level rules: Create a separate rule for each parent folder and select the subfolder scope in the Rules and Alerts dialog.
  • Third-party add-in like CodeTwo or AutoIt: Automates rule execution across folder trees without writing code.

ADVERTISEMENT

Why Outlook Rules Are Limited to a Single Folder

Outlook rules are event-driven. They fire when a new message arrives in the folder that the rule is associated with. By default, every rule you create in the Rules and Alerts wizard is assigned to the Inbox. You can change the folder in the rule description, but that folder becomes the sole trigger point. Subfolders are not evaluated unless you explicitly add them as separate rules.

The wizard does not offer a checkbox for Include Subfolders when selecting a folder. This is a deliberate design choice to keep the rule engine simple and avoid performance issues in large folder trees. To work around this, you must either duplicate the rule for each folder or use a method that iterates through folders programmatically.

Understanding this limitation is important. If you move messages into subfolders manually or through other rules, the original rule will not re-run on those messages. Only new mail arriving directly into a folder triggers its associated rule.

Method 1: Create a Separate Rule for Each Parent Folder

This method works best when you have a small number of folders. You create one rule per parent folder and set its scope to that folder. Subfolders are not automatically included, but you can repeat the rule for each parent.

  1. Open the Rules and Alerts dialog
    In Outlook, go to File > Manage Rules & Alerts. Click New Rule.
  2. Choose a template
    Select a rule template or start from a blank rule. Click Next.
  3. Set the condition
    Select the condition that triggers the rule, such as from people or public group. Click the underlined value in the rule description to specify the sender or other criteria.
  4. Set the action
    Select the action, for example move it to the specified folder. Click the underlined folder link in the description.
  5. Choose the target folder
    In the folder picker, select the folder where the rule will run. This is the folder where new mail arrives, not where messages will be moved. Click OK.
  6. Finish the rule
    Click Finish. Repeat steps 1 through 6 for each additional parent folder where you want the same rule to run. Each rule is independent.

This method does not include subfolders of the parent folder. If you need subfolders, create a rule for each subfolder individually.

ADVERTISEMENT

Method 2: Use a VBA Macro to Run a Rule on Multiple Folders and Subfolders

VBA (Visual Basic for Applications) lets you write a macro that iterates through all folders in a hierarchy and applies rule-like actions. This method is free and does not require third-party tools. You need to enable macros in Outlook.

Prerequisites: Enable the Developer Tab and Trust Center Settings

  1. Show the Developer tab
    Go to File > Options > Customize Ribbon. Under Main Tabs, check the box for Developer. Click OK.
  2. Enable macros
    Go to File > Options > Trust Center > Trust Center Settings. Select Macro Settings, then choose Enable all macros. Click OK.

Write the VBA Macro

  1. Open the VBA editor
    Press Alt+F11. In the left pane, expand Project1 (VbaProject.OTM) if needed.
  2. Insert a new module
    Right-click Modules and choose Insert > Module.
  3. Paste the macro code
    Copy the following code into the module window. This macro searches all folders under a specified parent folder, including subfolders, and moves messages that match a condition to a target folder.
    Sub RunRuleOnAllSubfolders()
        Dim olApp As Outlook.Application
        Dim olNS As Outlook.NameSpace
        Dim parentFolder As Outlook.MAPIFolder
        Dim targetFolder As Outlook.MAPIFolder
        Dim item As Object
        Dim i As Integer
        
        Set olApp = Outlook.Application
        Set olNS = olApp.GetNamespace("MAPI")
        
        ' Change this to your parent folder path
        Set parentFolder = olNS.Folders("yourmailbox@domain.com").Folders("Inbox").Folders("Projects")
        
        ' Change this to the folder where matching items will be moved
        Set targetFolder = olNS.Folders("yourmailbox@domain.com").Folders("Archive")
        
        ' Iterate through all items in the parent folder and its subfolders
        For i = 1 To parentFolder.Items.Count
            Set item = parentFolder.Items(i)
            ' Example condition: move items from a specific sender
            If item.Class = olMail And item.SenderEmailAddress = "noreply@example.com" Then
                item.Move targetFolder
            End If
        Next i
        
        ' Recursively process subfolders
        ProcessSubFolders parentFolder, targetFolder
        
        MsgBox "Rule applied to all folders."
    End Sub
    
    Sub ProcessSubFolders(ByVal folder As Outlook.MAPIFolder, ByVal target As Outlook.MAPIFolder)
        Dim subFolder As Outlook.MAPIFolder
        Dim item As Object
        Dim i As Integer
        
        For Each subFolder In folder.Folders
            For i = 1 To subFolder.Items.Count
                Set item = subFolder.Items(i)
                If item.Class = olMail And item.SenderEmailAddress = "noreply@example.com" Then
                    item.Move target
                End If
            Next i
            ' Recursively process deeper subfolders
            ProcessSubFolders subFolder, target
        Next subFolder
    End Sub
  4. Customize the macro
    Replace yourmailbox@domain.com with your actual mailbox name. Change the folder paths to match your folder structure. Modify the condition inside the If statement to match your rule criteria.
  5. Run the macro
    Press F5 to run it. The macro processes all items in the parent folder and all subfolders recursively.

This macro runs once. To make it run automatically when new mail arrives, you can attach it to the Application_NewMailEx event in the ThisOutlookSession module.

Method 3: Use a Third-Party Add-In

If you prefer not to write code, several third-party tools allow you to apply rules across folder hierarchies. These tools typically provide a graphical interface to select multiple folders and subfolders, then run rule actions on existing and incoming messages.

Popular options include CodeTwo Outlook Rules and AutoIt with Outlook UDF. CodeTwo extends the built-in rule wizard with subfolder support and advanced conditions. AutoIt is a scripting tool that can automate Outlook UI actions, but it requires some learning.

Before purchasing, verify that the add-in supports your Outlook version and does not conflict with existing rules. Many offer a free trial.

Common Issues When Running Rules on Multiple Folders

Rule Does Not Trigger on Existing Messages in Subfolders

Outlook rules only apply to incoming messages, not to messages already in a folder. To process existing messages, you must use the VBA macro method or a third-party tool that can scan folders. Alternatively, you can manually run a rule from the Rules and Alerts dialog by selecting Run Rules Now and choosing the folder, but this still only processes the selected folder, not its subfolders.

Macro Returns Error: Permission Denied

If your mailbox uses Exchange Online with modern authentication, VBA macros may fail because Outlook cannot access items directly. In this case, use the Microsoft Graph API with a PowerShell script or a third-party add-in that supports OAuth. For on-premises Exchange, ensure your macro security settings allow programmatic access.

Performance Issues with Large Folder Trees

Iterating through thousands of items in VBA can slow down Outlook. To improve performance, limit the search to specific subfolders or use the Items.Restrict method to filter items before processing. For example, replace the For i = 1 To subFolder.Items.Count loop with a filtered collection.

Item Manual Folder Rules VBA Macro Third-Party Add-In
Setup complexity Low Medium Low to Medium
Supports subfolders No, each folder needs a separate rule Yes, recursively Yes
Processes existing messages No Yes Usually yes
Requires coding No Yes No
Cost Free Free Usually paid
Best for Few folders, no subfolders Advanced users, custom logic Non-technical users, large hierarchies

You can now apply a single rule logic across multiple folders and their subfolders using manual rules, VBA macros, or third-party add-ins. Start with the manual method if you have only two or three folders. For deeper folder trees, use the VBA macro provided in this article. If you manage a large mailbox with complex folder structures, consider a third-party add-in that supports subfolder recursion and existing message processing. As an advanced tip, combine the VBA macro with an Outlook rule that triggers the macro on new mail arrival by adding a line to the Application_NewMailEx event in ThisOutlookSession.

ADVERTISEMENT