我正在处理下面的代码。有时候会起作用。我的意思是,我可以运行测试邮件,它可以做它应该做的事情,但有时我会出错:到目前为止,我收到的两个错误是:“操作失败,找不到目标。”和“商店上没有启用即时搜索”似乎是随机的。我的问题是如何增强代码,以确保它在不出现这些错误的情况下运行?我有程序规定每分钟都要开火。谢谢
Option Explicit
Sub MoveItems()
Dim myNameSpace As Outlook.NameSpace
Dim myInbox As Outlook.Folder
Dim myDestFolderWA As Outlook.Folder
Dim myDestFolderOR As Outlook.Folder
Dim myDestFolderID As Outlook.Folder
Dim myItems As Outlook.Items
Dim myItemWA As Object
Dim myItemOR As Object
Dim myItemID As Object
Dim strFilter1 As String
Dim strFilter2 As String
Dim strFilter3 As String
Dim RestrictItems As Outlook.Items
Dim Mail As Outlook.MailItem
On Error GoTo ErrHandler
Set myNameSpace = Application.GetNamespace("MAPI")
Set myInbox = myNameSpace.Folders("Subpayables Invoices").Folders("Inbox")
Set myItems = myInbox.Items
Set myDestFolderWA = myInbox.Folders("WA")
Set myDestFolderOR = myInbox.Folders("OR")
Set myDestFolderID = myInbox.Folders("ID")
strFilter1 = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_phrasematch 'washington'"
strFilter2 = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_phrasematch 'oregon'"
strFilter3 = "@SQL=" & Chr(34) _
& "urn:schemas:httpmail:subject" & Chr(34) _
& " ci_phrasematch 'idaho'"
Set RestrictItems = myItems.Restrict(strFilter1)
Set myItemWA = RestrictItems.GetFirst
Set RestrictItems = myItems.Restrict(strFilter2)
Set myItemOR = RestrictItems.GetFirst
Set RestrictItems = myItems.Restrict(strFilter3)
Set myItemID = RestrictItems.GetFirst
While TypeName(myItemWA) <> "Nothing"
myItemWA.Move myDestFolderWA
Set myItemWA = RestrictItems.GetNext
Wend
While TypeName(myItemOR) <> "Nothing"
myItemOR.Move myDestFolderOR
Set myItemOR = RestrictItems.GetNext
Wend
While TypeName(myItemID) <> "Nothing"
myItemID.Move myDestFolderID
Set myItemID = RestrictItems.GetNext
Wend
Exit Sub
ErrHandler:
MsgBox Err & ": " & Error(Err)
End Sub
发布于 2015-07-07 11:32:48
我没有得到任何错误,但它没有做我希望它做的事情。
您试过调试代码并查看那里发生了什么吗?你有什么错误吗?
如果一次将大量项添加到文件夹中(超过16项),则无法运行Items类的ItemAdd事件。这是一个众所周知的问题.是这样吗?
您可以考虑处理应用程序类的NewMailEx事件,该事件在收件箱中收到新项时触发。以下是MSDN的声明:
当新消息到达收件箱并在客户端规则处理发生之前,将触发NewMailEx事件。您可以使用EntryIDCollection数组中返回的条目ID来调用NameSpace.GetItemFromID方法并处理该项。使用此方法时要小心,以尽量减少对Outlook性能的影响。但是,根据客户端计算机上的设置,在新邮件到达收件箱后,可以异步地发生垃圾邮件筛选和将新邮件从收件箱移动到另一个文件夹的客户端规则等进程。您不应该假设在这些事件触发后,收件箱中的项目数量总是会增加一项。
https://stackoverflow.com/questions/31277455
复制