如何将NoteItem或TaskItem从一个Deleted Items文件夹复制到另一个Deleted Items文件夹?

时间:2020-02-24 17:39:49

标签: vba outlook

我正在尝试编写脚本,将现有PST文件(源)中的项目迁移到多个新PST文件(目标)中。基本上,我要在现有PST中获取项目,然后根据收到/创建项目的年份将其复制到新的PST文件中,但是在从Deleted Items文件夹中复制项目时遇到了问题源PST到目标PST中的Deleted Items文件夹。

如果我右键单击源PST文件中的项目,请选择Move,然后选择Copy to Folder,然后选择目标PST中的Deleted Items文件夹,该项目将为复制到新的PST文件,而不管类型/消息类别如何。但是,如果我使用VBA将项目对象转换为适当的类型,然后使用Copy方法(或AppointmentItem使用CopyTo方法),则NoteItem和TaskItem会出现Run-time error '13': Type mismatch错误对象。

以下代码段不适用于NoteItem和TaskItem对象:

Set olSession = Application.Session

Set olSourceFolder = olSession.Folders("Old PST").Folders("Deleted Items")
Set olTargetFolder = olSession.Folders("New PST").Folders("Deleted Items")

Set olSourceItems = olSourceFolder.Items

For Each olItem in olSourceItems
    Select Case True
        Case TypeOf olItem Is AppointmentItem
            Set olAppointmentItemSource = olItem
            Set olAppointmentItemTarget = olAppointmentItemSource.Copy
            olAppointmentItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is ContactItem
            Set olContactItemSource = olItem
            Set olContactItemTarget = olContactItemSource.Copy
            olContactItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is DistListItem
            Set olContactItemSource = olItem
            Set olContactItemTarget = olContactItemSource.Copy
            olContactItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is JournalItem
            Set olJournalItemSource = olItem
            Set olJournalItemTarget = olJournalItemSource.Copy
            olJournalItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is MailItem
            Set olMailItemSource = olItem
            Set olMailItemTarget = olMailItemSource.Copy
            olMailItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is MeetingItem
            Set olMeetingItemSource = olItem
            Set olMeetingItemTarget = olMeetingItemSource.Copy
            olMeetingItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is NoteItem
            Set olNoteItemSource = olItem
            Set olNoteItemTarget = olNoteItemSource.Copy            'This generates the error
            olNoteItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is PostItem
            Set olPostItemSource = olItem
            Set olPostItemTarget = olPostItemSource.Copy
            olPostItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is ReportItem
            Set olReportItemSource = olItem
            Set olReportItemTarget = olReportItemSource.Copy
            olReportItemTarget.Move olFolderTarget
        Case TypeOf olObjectSource Is TaskItem
            Set olTaskItemSource = olItem
            Set olTaskItemTarget = olTaskItemSource.Copy            'This generates the error
            olTaskItemTarget.Move olFolderTarget
    End Select
Next

我注意到上面所测试的代码中的错误发生在哪里。

为什么我的代码抛出运行时错误,我该如何解决?换句话说,如何使用适用于所有类型的VBA来模仿Copy to Folder GUI功能?

谢谢。

0 个答案:

没有答案