我有用于检索Outlook 2013的规则的代码。它不能在运行Outlook 2016的机器上工作。
Set colRules = Session.DefaultStore.GetRules()
For Each oRule In colRules
ruleName = oRule.Name
If Left(ruleName, 21) = "AutoCategorize into *" Then
oRule.Execute (True)
End If
Next根据我的调试,问题在返回的colRules对象中。
2016年,它显示出有26个项目,但没有任何项目:
2016年调试视图图像

在Outlook 2013上,同一个对象显示了2013年的所有26项(规则):调试视图映像

我找到了原因,但没有找到解决办法。
rules对象包含“来自另一台计算机的规则”。
我删除了所有标记为“从另一台计算机中”来测试的规则。
现在它确实找到了所有剩下的规则。OutlookSpy也一样。
它不能保持这样,因为它是Exchange邮箱,所以它也从另一台计算机中删除了规则。我在另一个帐户上测试了这个,得到了同样的结果。
发布于 2017-01-25 20:42:26
请尝试下面的宏,我在挣扎之后,帮助我理解我的规则在我的Outlook 2016安装中的位置,因为它们不是我想的那样。
除两个外,我的所有商店都生成消息:“440此商店不支持规则。无法完成操作。“对于所有这些存储,规则位于默认存储区“outlook数据文件”中。但是一家商店有自己的规则。
通过安装我的Outlook,具有自己规则的存储具有“OST”扩展,表示它是脱机存储。“outlook数据文件”和所有其他商店都有“PST”的扩展名。
我想知道这个宏为您生成了什么。您的规则是否在OST存储中,而不是您所期望的默认存储中?
Public Sub DemoRules()
Dim ColRules As Outlook.Rules
Dim ErrDesc As String
Dim ErrNum As Long
Dim InxStoreCrnt As Long
Dim RuleCrnt As Outlook.Rule
With Session
For InxStoreCrnt = 1 To .Stores.Count
With .Stores(InxStoreCrnt)
Debug.Print .DisplayName
Set ColRules = Nothing
On Error Resume Next
Set ColRules = .GetRules()
ErrNum = Err.Number
ErrDesc = Err.Description
On Error GoTo 0
If ErrNum <> 0 Then
Debug.Print " " & ErrNum & " " & ErrDesc
Else
If Not ColRules Is Nothing Then
If ColRules.Count = 0 Then
Debug.Print " no rules in this store"
Else
For Each RuleCrnt In ColRules
Debug.Print " " & RuleCrnt.Name
Next
End If
Else
Debug.Print " No error but GetRules returned Nothing"
End If
End If
End With
Set ColRules = Nothing
Next
End With
End Subhttps://stackoverflow.com/questions/41841957
复制相似问题