我有一个奇怪的问题。当我打电话给某个VBA来制作邮件项目的复制,然后将复制到另一个文件夹时,我收到错误。该操作实际上完成了。
让我有点难以解决的问题(至少对我而言)是,当我调试代码时,它会逐步完成而不会出错。我删除断点时只会出错。最后,如果我发表评论:
moveMail.Move DestinationFolder
或
copied = MoveToFolder(copyMail, FolderName)
它会在原始文件夹中创建大量的副本。它最早的切入点来自New Mail事件,所以我想知道是否
Set copyMail = olItem.Copy
导致再次关闭该事件。在任何情况下,在解决错误时都会感激任何帮助。
这是我的 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")
答案 0 :(得分:1)
以下是MSDN对NewMailEx
事件的陈述:
当新邮件到达收件箱时以及客户端规则处理发生之前,
NewMailEx
事件将触发。您可以使用EntryIDCollection
数组中返回的条目ID来调用NameSpace.GetItemFromID
方法并处理该项。请谨慎使用此方法,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。您不应该假设在这些事件发生后,您将始终获得收件箱中项目数量的一项增加。
看起来您在Outlook中设置了一些规则。并且这些规则可以在通过处理程序之后或异步地对项目运行,即当您尝试调用Move
方法时。是这样的吗?
作为一种解决方法,您可以考虑获取条目ID,并尝试在Outlook处理完收到的项目后获取该项目。或者只是处理ItemSend
事件。
无论如何,您可能会发现以下系列文章有用: