MailItem.Move 已读邮件的方法

MailItem.Move method for mail that is read

我试图首先检查特定文件夹(“待处理”)中的邮件是否已被阅读。如果邮件已读,将其移动到另一个特定文件夹(“完成”)。

对于“待处理”中的剩余邮件,请保存附件并将其标记为“已读”。

当我尝试使用“.Move”将每封已读邮件从“待处理”文件夹移动到“完成”时,掉落

"error 424. An object is required".

问题是OItem.Move OFolderDst

Sub MoveInbox2Reviewed()

Dim OutlookApp As Outlook.Application
Dim ONameSpace As Object
Dim OItem As Outlook.MailItem
Dim OFolderSrc As Object
Dim OFolderDst As Object
Dim Path As String

Set OutlookApp = New Outlook.Application
Set ONameSpace = OutlookApp.GetNamespace("MAPI")

Set OFolderSrc = ONameSpace.GetDefaultFolder(olFolderInbox).Folders("pending")
Set OFolderDst = ONameSpace.GetDefaultFolder(olFolderInbox).Folders("done")

Path = "C:\Users\..."

For Each OItem In OFolderSrc.Items.Restrict("[Unread] = False")
    OItem.Move OFolderDst 'The problem is here
Next

For Each OItem In OFolderSrc.Items
    OItem.Attachments.SaveAsFile Path & Attachment.DisplayName
    OItem.UnRead = False
Next

End Sub

每次调用 Move 时,集合都会减少一项。因此,我建议使用反向 for 循环来代替从文件夹中移动项目。例如:

for i = Items.Count to 1 step -1
  Items(i).Move folder
next

因此,在代码中您可能会获取所有未读项目(由 Items 集合表示),然后调用反向循环来移动项目。