在Outlook中运行VBA宏时暂停/停止下载新电子邮件[暂停/停止同步]

在Outlook中运行VBA宏时暂停/停止下载新电子邮件[暂停/停止同步],vba,outlook,Vba,Outlook,我不熟悉Outlook中的VBA编程 我正在写一个宏,它扫描收件箱并通过检查主题、发件人、正文等条件将电子邮件移动到特定文件夹 现在的问题是,当我在邮箱中循环时,一封新邮件进来,循环就中断了。 我想到的第一个可能的解决方案是在宏运行时禁用电子邮件同步。我进一步研究了这个问题,并在Outlook VBA中找到了同步对象,方法是Sync.Start和Sync.Stop 所以我声明了链接中的所有变量,并尝试了代码。一切似乎都在执行中没有错误,我循环了所有的同步对象并停止它们,但我注意到电子邮件还是会

我不熟悉Outlook中的VBA编程

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

现在的问题是,当我在邮箱中循环时,一封新邮件进来,循环就中断了。

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

所以我声明了链接中的所有变量,并尝试了代码。一切似乎都在执行中没有错误,
我循环了所有的同步对象并停止它们
,但我注意到电子邮件还是会进入我的收件箱

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
我们非常感谢您提出的任何解决此问题的方法或其他方法。谢谢


[编辑1207.05.2020,20:29]谢谢你们的评论,伙计们,我刚刚有了另一个想法。我可以创建一个临时文件夹,将所有符合我的条件的电子邮件从收件箱移动到这个临时文件夹,将这些电子邮件从临时文件夹排序到其他文件夹。这应该是可行的,因为与收件箱不同,临时文件夹中不会出现新的电子邮件

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


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

而不是迭代文件夹中的所有项目,并且在新项目到达时不要中断循环,我建议使用
Find
/
FindNext
Restrict
方法,在这些方法中,您只能找到与您的条件相对应的项目。请在以下文章中阅读有关这些方法的更多信息:


此外,您还可以通过查找一周或一个月内的所有项目等方式对项目进行分块处理。

这是一个好主意,实际上,我还没有想到这一点!非常感谢。我将不得不对此进行研究,但我代码中的逻辑部分相当大:将100多种不同类型的电子邮件分类到50多个文件夹中。通过使用不同标准的组合,我担心这会非常缓慢。但当我读到这篇文章时,我会做一个测试:)谢谢