Outlook VBA将邮件项目移动/复制到文件夹错误

时间:2018-04-24 14:47:39

标签: vba outlook

我有一个奇怪的问题。当我打电话给某个VBA来制作邮件项目的复制,然后复制到另一个文件夹时,我收到错误。该操作实际上完成了。

让我有点难以解决的问题(至少对我而言)是,当我调试代码时,它会逐步完成而不会出错。我删除断点时只会出错。最后,如果我发表评论:

moveMail.Move DestinationFolder

copied = MoveToFolder(copyMail, FolderName)

它会在原始文件夹中创建大量的副本。它最早的切入点来自New Mail事件,所以我想知道是否

Set copyMail = olItem.Copy

导致再次关闭该事件。在任何情况下,在解决错误时都会感激任何帮助。

Error

这是我的 CopyToFolder MoveToFolder 功能:

Function MoveToFolder(olItem As Outlook.MailItem, FolderName As String) As Boolean
    Dim objNS As Outlook.NameSpace
    Dim Inbox As Outlook.Folder
    Dim DestinationFolder As Outlook.Folder
    Dim moveMail As Outlook.MailItem

    Set objNS = Application.GetNamespace("MAPI")
    Set DestinationFolder = objNS.Folders("MyMailBox@mailboxes.com").Folders(FolderName)

    Set moveMail = olItem

    moveMail.Move DestinationFolder

    Set moveMail = Nothing
    Set DestinationFolder = Nothing
    Set Inbox = Nothing
    Set objNS = Nothing

End Function

Function CopyToFolder(olItem As Outlook.MailItem, FolderName As String) As Boolean
    Dim copyMail As Outlook.MailItem
    Dim copied As Boolean

    Set copyMail = olItem.Copy

    copied = MoveToFolder(copyMail, FolderName)
    CopyToFolder = copied

    Set copyMail = Nothing

End Function

我可以通过以下方式调用 CopyToFolder 功能:

copyResult = CopyToFolder(olItem, "External")

1 个答案:

答案 0 :(得分:1)

以下是MSDN对NewMailEx事件的陈述:

  

当新邮件到达收件箱时以及客户端规则处理发生之前,NewMailEx事件将触发。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应该假设在这些事件发生后,您将始终获得收件箱中项目数量的一项增加。

看起来您在Outlook中设置了一些规则。并且这些规则可以在通过处理程序之后或异步地对项目运行,即当您尝试调用Move方法时。是这样的吗?

作为一种解决方法,您可以考虑获取条目ID,并尝试在Outlook处理完收到的项目后获取该项目。或者只是处理ItemSend事件。

无论如何,您可能会发现以下系列文章有用: