我正在尝试编写脚本,将现有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功能?
谢谢。