【问题标题】:Pause/Stop downloading new emails while running VBA macro in Outlook [pause/stop sync]在 Outlook 中运行 VBA 宏时暂停/停止下载新电子邮件 [暂停/停止同步]
【发布时间】:2020-05-06 17:59:26
【问题描述】:

我是 Outlook 中 VBA 编程的新手。

我正在编写一个宏,它通过检查主题、发件人、正文等标准来扫描收件箱并将电子邮件移动到特定文件夹。

现在的问题是,当我循环浏览邮箱并收到新电子邮件时,循环中断。

我想到的第一个可能的解决方案是在宏运行时禁用电子邮件同步。 我对此进行了进一步研究,并在 Outlook VBA 中使用 Sync.StartSync.Stop 方法找到了同步对象

docs Microsoft - SyncObject.Start method

所以我声明了链接中的所有变量并尝试了代码。一切似乎都没有错误地执行,I loop through all the sync objects and stop them 但是我注意到电子邮件无论如何都会进入我的收件箱。

Public Sub Sync() 
 Dim nsp As Outlook.NameSpace 
 Dim sycs As Outlook.SyncObjects 
 Dim syc As Outlook.SyncObject 
 Dim i As Integer 

Set nsp = Application.GetNamespace("MAPI") 
Set sycs = nsp.SyncObjects 

For i = 1 To sycs.Count 
    Set syc = sycs.Item(i) 
    syc.Stop  
Next 
End Sub

非常感谢任何如何使这项工作的想法或如何克服这个问题的其他想法。谢谢

[EDIT 1, 07.05.2020, 20:29] 感谢你们的 cmets 伙计们,我刚刚有了另一个想法。我可以创建一个临时文件夹,将所有满足我条件的电子邮件从收件箱移到这个临时文件夹中,然后将这些电子邮件从那个临时文件夹中分类到其他文件夹中。 这应该可行,因为与收件箱不同,临时文件夹不会有新电子邮件!

【问题讨论】:

标签: vba outlook


【解决方案1】:

首先,请显示您处理项目的代码。

其次,您可以对 ReceivedTime 上的集合 (Items.Sort) 进行排序并向后处理 Items 集合 (Items.Count to 1 step -1)

【讨论】:

  • 这其实是个好主意,没想到!谢谢!
【解决方案2】:

我建议使用Find/FindNextRestrict 方法,而不是遍历文件夹中的所有项目并且在新项目到达时不要中断循环符合你的条件。在以下文章中详细了解这些方法:

此外,您可以通过查找一周或一个月的所有项目等来逐个处理项目。

【讨论】:

  • 我必须对此进行研究,但是我的代码中的逻辑部分相当大:将 100 多个不同类型的电子邮件分类到 50 多个文件夹中。通过使用不同标准的组合,恐怕这会非常慢。但是当我读到这个时,我会做一个测试:) 谢谢
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多