The Rule.ExecutionOrder property could be used to assign priority to rules. Rules.Item(1) represents a rule with ExecutionOrder being 1, Rules.Item(2) represents a rule with ExecutionOrder being 2, and Rules.Item(Rules.Count) represents the rule with ExecutionOrder being Rules.Count.http://msdn.microsoft.com/en-us/library/bb176165.aspx
The below VBA script changes the Execution order of the 2nd rule whose execution order is 2nd to last.Whenever the order for the rule x changed to x+n, all the rules from x+1 till x+n is shifted up.E.g. If there are 5 rules and the 2nd rule whose Execution order is 2nd is changed to 5:Rule 3 execution order is changed to 2Rule 4 execution order is changed to 3Rule 5 execution order is changed to 4Rule 2 execution order is changed to 5
Sub CreateRule() Dim colRules As Outlook.Rules Dim oRule As Outlook.Rule Dim colRuleActions As Outlook.RuleActions Dim oMoveRuleAction As Outlook.MoveOrCopyRuleAction Dim oFromCondition As Outlook.ToOrFromRuleCondition Dim oExceptSubject As Outlook.TextRuleCondition Dim oInbox As Outlook.Folder Dim oMoveTarget As Outlook.Folder Dim intCounter As Integer Dim oRuleCount As Integer Set oInbox = Application.Session.GetDefaultFolder(olFolderInbox) 'Get Rules from Session.DefaultStore object Set colRules = Application.Session.DefaultStore.GetRules() oRuleCount = colRules.Count Debug.Print oRuleCount intCounter = 1 Do While intCounter < (colRules.Count + 1) Set oRule = colRules.Item(intCounter) Debug.Print oRule.Name Debug.Print oRule.ExecutionOrder intCounter = intCounter + 1 Loop Set oRule = colRules.Item(2) oRule.ExecutionOrder = oRuleCount 'Update the server and display progress dialog colRules.Save End Sub
If a rule is created using the Outlook Rules Wizard, its value is least and has highest priority. The existing rules gets pushed down by 1 i.e. PR_RULE_SEQUENCE gets increased by 1 for all the existing rules.Conversely, a new rule gets higher priority when created using Outlook wizard or using Outlook Object model programmatically.