在我的驱动器中保存outlook消息有问题



我想在我的驱动器中保存outlook消息,但我得到一个运行时错误287:"应用程序定义或对象错误">

Sub extract_outlook_emails()
Dim ap As Outlook.Application
Dim fl As Outlook.MAPIFolder
Dim it As Outlook.MailItem
Dim space As Outlook.Namespace
Dim i As Long
Dim p As Variant

Dim str As String

Set ap = New Outlook.Application

Set space = ap.GetNamespace("MAPI")

Set fl = space.GetDefaultFolder(olFolderInbox)
For Each it In fl.Items
If it.Class = olMail Then
If VBA.InStr(1, it.Subject, "Product_19854") Then

p = SaveSelectMail(it.Subject)

str = "c:"&environ("user profile") & p & "-" & VBA.Format(it.ReceivedTime, "ddmmyyyy", vbUseSystemDayOfWeek) & ".msg"
it.SaveAs str, OlSaveAsType.olMSG

End If

End If
Next it

end sub

首先,Outlook文件夹可能包含不同类型的项目-邮件,日历,任务,文档项目等。但在代码中,您将迭代所有类型为MailItem的项目:

Dim it As Outlook.MailItem
...
For Each it In fl.Items

您需要将it定义为对象,并使用后绑定技术来避免代码中的错误。

遍历文件夹中的所有项目也不是一个好主意。要查找主题包含关键字的所有邮件(任何您的搜索条件),您可以使用Items类的Find/FindNextRestrict方法。在以下文章中阅读更多关于它们的信息:

  • 如何:使用Find和FindNext方法从文件夹中检索Outlook邮件项目(c#, VB.NET)
  • 如何:使用Restrict方法从文件夹
  • 中检索Outlook邮件项目

但是如果您需要在多个文件夹中搜索项目,您可以考虑使用Application类的AdvancedSearch方法。在Outlook中使用AdvancedSearch方法的主要好处是:

  • 在另一个线程中执行搜索。你不需要手动运行另一个线程,因为AdvancedSearch方法会在后台自动运行它。
  • 可以在任何位置搜索任何项目类型:邮件,约会,日历,笔记等,即超出某个文件夹的范围。RestrictFind/FindNext方法可以应用于特定的Items集合(参见Outlook中Folder类的Items属性)。
  • 完全支持DASL查询(自定义属性也可以用于搜索)。您可以在MSDN的过滤文章中阅读更多相关内容。为了提高搜索性能,如果商店启用了即时搜索,可以使用即时搜索关键字(参见Store类的IsInstantSearchEnabled属性)。
  • 可以使用Search类的Stop方法随时停止搜索进程。

参见Outlook编程高级搜索:c#, VB。. NET获取更多信息。

相关内容

  • 没有找到相关文章

最新更新