【问题标题】:Outlook 365 Macro to Enable/Disable/Run All RulesOutlook 365 宏启用/禁用/运行所有规则
【发布时间】:2020-01-04 01:58:41
【问题描述】:

当我从 Outlook 2016 迁移到 365 时,我的宏停止工作。我正在寻找对以下代码的更正,以帮助我修复宏以分别启用/禁用和运行所有规则。

Option Explicit

Sub ThePurge()
Dim st As Outlook.Store
Dim myRules As Outlook.Rules
Dim rl As Outlook.Rule
Dim runrule As String
Dim rulename As String
Dim rulelist As String
Dim oDeletedItems As Outlook.Folder
Dim oFolders As Outlook.Folders
Dim oItems As Outlook.Items
Dim i As Long

rulename = "ThePurge"

Set st = Application.Session.DefaultStore
Set myRules = st.GetRules

For Each rl In myRules
    If rl.RuleType = olRuleReceive Then
        If rl.Name = rulename Then
            rl.Execute ShowProgress:=True, IncludeSubfolders:=True
            runrule = rl.Name
        End If
    End If
Next

rulelist = "This rule was executed against the Inbox and Subfolders:" & 
vbCrLf & runrule
MsgBox rulelist, vbInformation, "Macro: The PURGE"

 'Obtain a reference to deleted items folder
Set oDeletedItems = 
Application.Session.GetDefaultFolder(olFolderDeletedItems)
Set oItems = oDeletedItems.Items
 For i = oItems.count To 1 Step -1
oItems.Item(i).Delete
Next
 Set oFolders = oDeletedItems.Folders
 For i = oFolders.count To 1 Step -1
 oFolders.Item(i).Delete
Next

Set rl = Nothing
Set st = Nothing
Set myRules = Nothing
End Sub

Sub DisableAllRules()
Dim colRules As Outlook.Rules
Dim oRule As Outlook.Rule
Dim count As Integer
Dim rulelist As String
'On Error Resume Next

'Get Rules from Session.DefaultStore object
Set colRules = Application.Session.DefaultStore.GetRules

' iterate all the rules
For Each oRule In colRules
oRule.Enabled = False
count = count + 1
rulelist = rulelist & vbCrLf & count & ". " & oRule.Name
Next

colRules.Save

' tell the user what you did
rulelist = "These rules were disabled: " & vbCrLf & rulelist
MsgBox rulelist, vbInformation, "Macro: DisableAllRules"

Set colRules = Nothing
Set oRule = Nothing
End Sub

Sub EnableAllRules()
Dim colRules As Outlook.Rules
Dim oRules As Outlook.Rules
Dim oRule As Outlook.Rule
Dim olRules As Outlook.Rules
Dim olRule As Outlook.Rule
Dim count As Integer
Dim rulelist As String
Dim blnExecute As Boolean

'On Error Resume Next

'Get Rules from Session.DefaultStore object
Set colRules = Application.Session.DefaultStore.GetRules

' iterate all the rules
For Each oRule In colRules
oRule.Enabled = True
count = count + 1
rulelist = rulelist & vbCrLf & count & ". " & oRule.Name
Next

colRules.Save

' tell the user what you did
rulelist = "These rules were enabled: " & vbCrLf & rulelist
MsgBox rulelist, vbInformation, "Macro: EnableAllRules"

Set olRules = Application.Session.DefaultStore.GetRules
Set olRule = olRules.Item("ThePurge")
olRule.Enabled = False
If blnExecute Then olRule.Execute ShowProgress:=True
 olRules.Save
Set olRules = Nothing
Set olRule = Nothing

Set colRules = Nothing
Set oRule = Nothing
End Sub

Sub RunAllRules()
Dim colRules As Outlook.Rules
Dim oRule As Outlook.Rule
Dim olRule As Outlook.Rule
Dim olRules As Outlook.Rules
Dim count As Integer
Dim rulelist As String
Dim blnExecute As Boolean
'On Error Resume Next

'Get Rules from Session.DefaultStore object
Set colRules = Application.Session.DefaultStore.GetRules

' iterate all the rules
For Each oRule In colRules
oRule.Enabled = True
oRule.Execute ShowProgress:=True
count = count + 1
rulelist = rulelist & vbCrLf & count & ". " & oRule.Name
Next

colRules.Save

' tell the user what you did
rulelist = "These rules were Enforced: " & vbCrLf & rulelist
MsgBox rulelist, vbInformation, "Macro: Run ALL Rules"

Set olRules = Application.Session.DefaultStore.GetRules
Set olRule = olRules.Item("ThePurge")
olRule.Enabled = False
If blnExecute Then olRule.Execute ShowProgress:=True
olRules.Save

Set colRules = Nothing
Set oRule = Nothing
End Sub

Sub EmptyTrash()
Dim oDeletedItems As Outlook.Folder
Dim oFolders As Outlook.Folders
Dim oItems As Outlook.Items
Dim i As Long

'Obtain a reference to deleted items folder
 Set oDeletedItems =                     
Application.Session.GetDefaultFolder(olFolderDeletedItems)
Set oItems = oDeletedItems.Items
For i = oItems.count To 1 Step -1
oItems.Item(i).Delete
Next
Set oFolders = oDeletedItems.Folders
For i = oFolders.count To 1 Step -1
oFolders.Item(i).Delete
Next
End Sub

当我尝试运行此规则时,我在此代码的 sn-p 上收到调试错误(说明运行时错误。一个或多个规则存在冲突):

Set colRules = Application.Session.DefaultStore.GetRules

【问题讨论】:

  • GetRules 是返回一个集合还是为空?
  • 获取运行时错误“一个或多个规则发生冲突。您必须先解决冲突才能保存规则。此代码的 sn-p 突出显示:Set colRules = Application .Session.DefaultStore.GetRules

标签: vba outlook office365


【解决方案1】:

您似乎有一些规则冲突。当您尝试在 Outlook 中手动编辑现有规则时,是否遇到任何错误?

Some rules are disabled, and you receive an error message when you try to create or enable rules in Outlook 文章描述了类似的问题。

您可以尝试文章中描述的方法之一:

方法一

将您的规则重命名为更短的名称。要在 Outlook 中重命名规则,请按照以下步骤操作。

对于 Outlook 2010 及更高版本:

1.在“文件”选项卡上,单击“信息”。

2.然后,单击管理规则和警报。

3.在电子邮件规则选项卡上,单击要重命名的规则。

4.单击更改规则,然后单击重命名规则。

5.为规则键入一个新的、更短的名称,然后单击“确定”。

6.单击“确定”关闭“规则和警报”对话框。

对于 Outlook 2007 和 Outlook 2003:

1.在“工具”菜单上,单击“规则和警报”。

2.在“电子邮件规则”选项卡上,单击要重命名的规则。

3.在更改规则列表中,单击重命名规则。

4.为规则键入一个新的、更短的名称,然后单击“确定”。

5.单击“确定”关闭“规则和警报”对话框。

方法二

删除所有旧规则。要删除 Outlook 中的规则,请按以下步骤操作:

对于 Outlook 2010 及更高版本:

1.在“文件”选项卡上,单击“信息”。

2.然后,单击管理规则和警报。

3.在电子邮件规则选项卡上,单击要重命名的规则。

4.单击删除按钮,然后单击是确认删除。

5.单击“确定”关闭“规则和警报”对话框。

对于 Outlook 2007 和 Outlook 2003:

1.在“工具”菜单上,单击“规则和警报”。

2.在电子邮件规则选项卡上,单击要删除的规则。

3.单击删除,然后单击是确认删除。

4.单击“确定”关闭“规则和警报”对话框。

方法3

组合类似的规则以减小规则的整体大小。如果可能,请组合类似的规则以减小规则的整体大小。合并相似规则后,删除不再需要的规则。要在 Outlook 中编辑现有规则,请按照以下步骤操作。

对于 Outlook 2010 及更高版本:

1.在文件选项卡上,单击信息。

2.然后,单击管理规则和警报。

3.在电子邮件规则选项卡上,单击要重命名的规则。

4.单击更改规则,然后单击编辑规则设置。

5.根据需要修改规则。

6.单击“确定”关闭“规则和警报”对话框。

对于 Outlook 2007 和 Outlook 2003:

1.在“工具”菜单上,单击“规则和警报”。

2.在电子邮件规则选项卡上,单击要编辑的规则。

3.在更改规则列表中,单击编辑规则设置。

根据需要修改规则。

4.完成后,单击“完成”,然后单击“确定”关闭“规则和警报”对话框。

注意如果该规则是仅限客户端的规则,您必须单击“确定”两次以关闭“规则和警报”对话框。

方法四

将您的个人文件夹 (.pst) 文件移动到具有最短路径名的位置。如果您有将电子邮件消息移至 .pst 文件的规则,请将 .pst 文件移至路径名称尽可能短的位置。例如,将 .pst 文件移动到 C:\file_name.pst 等位置。要在 Outlook 中移动 .pst 文件,请按以下步骤操作:

1.在导航窗格中,右键单击个人文件夹或为您的 .pst 文件显示的文件夹名称,然后单击文件夹名称的属性。

注意此文件夹将始终是导航窗格中邮件的顶级文件夹。

2.在“常规”选项卡上,单击“高级”。

3.在文件名文本框中,记下 .pst 文件的完整路径和文件名。

4.单击确定两次关闭文件夹名称属性对话框。

5.退出 Outlook。

6.使用 Microsoft Windows 资源管理器将 .pst 文件移动到新位置。

注意默认情况下,.pst 文件的位置是驱动器:\Documents and Settings\user_name\Local Settings\Application Data\Microsoft\Outlook 文件夹。默认位置是隐藏文件夹。要使用 Windows 资源管理器定位此文件夹,您必须首先打开隐藏文件夹的显示。为此,请按以下步骤操作:

a.在 Windows 资源管理器中,单击工具菜单上的文件夹选项。

b.单击查看选项卡。

c.在高级设置部分,点击隐藏文件和文件夹下的显示隐藏文件和文件夹。

d.如果您想查看所有文件扩展名,请单击以清除“文件和文件夹”下的“隐藏已知文件类型的扩展名”复选框。

请注意,隐藏文件夹显示为灰色,表示它们不是典型文件夹。

e.单击确定。

7.使用以下方法之一在控制面板中打开邮件项:

要在基于 Windows XP 的计算机或基于 Windows Server 2003 的计算机上执行此操作,请单击开始,单击控制面板,单击用户帐户,然后单击邮件。

注意如果您使用的是经典视图,请单击开始,单击控制面板,然后双击邮件。

要在基于 Microsoft Windows 2000 的计算机上执行此操作,请单击“开始”,指向“设置”,单击“控制面板”,然后双击“邮件”。

8.单击显示配置文件,然后单击包含您的 .pst 文件的配置文件。

9.单击属性,然后单击数据文件。

10.单击您移动的 .pst 数据文件,然后单击设置。

11.当提示在旧位置找不到数据文件时,点击确定。

12.在新文件夹位置找到并单击您的 .pst 文件,然后单击打开。

13.单击“确定”,然后单击“关闭”两次。

14.点击确定。

15.退出控制面板。

16.重新启动 Outlook。

方法五

清除仅在本机上复选框。如果您使用规则将电子邮件消息移动到 .pst 文件,请单击以清除仅在本机上复选框,除非您从不同的客户端计算机访问您的 Exchange Server 电子邮件。要在 Outlook 中执行此操作,请按以下步骤操作:

对于 Outlook 2010 及更高版本:

1.在“文件”选项卡上,单击“信息”。

2.然后,单击管理规则和警报。

3.在电子邮件规则选项卡上,单击要重命名的规则。

4.单击更改规则,然后单击编辑规则设置。

5.如果选中复选框,请单击以清除仅在本机上复选框。

6.完成规则向导。单击“确定”关闭“规则和警报”对话框。

对于 Outlook 2007 和 Outlook 2003:

1.在“工具”菜单上,单击“规则和警报”。

2.在电子邮件规则选项卡上,单击要编辑的规则。

3.在更改规则列表中,单击编辑规则设置。

4.如果选中,单击以清除仅在本机上复选框。

5.完成规则向导。

6.单击“确定”关闭“规则和警报”对话框。

注意如果您使用指向本地资源文件的仅限客户端的规则,例如将项目移动到 .pst 文件中的文件夹,并且您使用多台计算机访问 Microsoft Outlook,则可能会发生规则冲突。因此,某些仅限客户端的规则可能会被禁用。

【讨论】:

  • 我已经尝试了所有这些,但仍然收到运行时错误“一个或多个规则发生冲突。您必须先解决冲突,然后才能保存规则。这个 sn-p代码高亮显示:Set colRules = Application.Session.DefaultStore.GetRules
猜你喜欢
  • 2016-02-17
  • 2013-10-15
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2020-01-25
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
相关资源
最近更新 更多