如何遍历Outlook规则集并识别错误规则及具体错误?
环境版本
- Outlook版本 2211(内部版本 15831.20208 点击运行)
- Access版本 2211(内部版本 15831.20208 点击运行)
初始获取规则的VBA代码
Set olApp = GetObject(, "Outlook.Application") ' 获取所需的Outlook对象 Set olNameSpace = olApp.GetNamespace("MAPI") Set olFolder = olNameSpace.GetDefaultFolder(olFolderInbox) Set olStore = olFolder.Store Set olRules = olStore.GetRules lRecordNumberEnd = olRules.Count For Each olRule In olRules
核心疑问
是否可以通过olRule对象判断某条规则已被标记为错误,并获取具体错误信息?
当前错误处理场景
当处理一条将邮件移动到指定文件夹的规则时,引用文件夹名称会触发错误,当前的错误处理代码如下:
Case olRuleActionMoveToFolder ' 规则操作为将邮件移动到指定文件夹。 Set olMoveOrCopyRuleAction = olAction On Error Resume Next rs.Fields("Information").Value = " " & " " & olMoveOrCopyRuleAction.Folder If Err.Number <> 0 Then If Err.Number = 91 Then rs.Fields("Information").Value = " " & " " & "***** 文件夹未定义 *****" Else rs.Fields("Information").Value = " " & " " & Err.Description End If rs.Fields("Status").Value = " **Error**" End If On Error GoTo 0
在Outlook中点击「规则/管理规则和警报」时,会弹出提示框:
一个或多个规则包含错误。请删除或修改这些规则。
可见Outlook能直接判断至少有一条启用的规则存在错误,即便错误规则已禁用,也会在规则列表中高亮显示。
现在的问题是:如何无需触发错误、无需处理规则,就能通过olRule对象识别某条规则是否存在错误及具体错误内容?
解决方案
Outlook对象模型的olRule本身没有直接暴露错误状态属性,但可以调用Rule.Validate方法提前检测规则有效性,该方法会返回一个RuleValidationError集合,集合内的每个元素包含具体错误信息和对应规则组件。
示例代码如下:
Dim olRule As Outlook.Rule Dim validationErrors As Outlook.RuleValidationErrors Dim validationError As Outlook.RuleValidationError ' 遍历规则集合 For Each olRule In olRules Set validationErrors = olRule.Validate If validationErrors.Count > 0 Then ' 规则存在错误 Debug.Print "规则 [" & olRule.Name & "] 存在以下错误:" For Each validationError In validationErrors Debug.Print "错误代码:" & validationError.ErrorCode & ",描述:" & validationError.Description Next Else Debug.Print "规则 [" & olRule.Name & "] 验证通过" End If Next
Rule.Validate方法会模拟Outlook检查规则有效性的逻辑,不需要实际执行规则或触发运行时错误,就能获取所有规则相关错误(比如引用文件夹不存在、规则条件无效等),检测结果和Outlook「管理规则和警报」中显示的错误状态完全一致,无论规则是否启用都能生效。
内容的提问来源于stack exchange,提问作者saberman
相关产品推荐
相关产品推荐

