繁体   English   中英

如何使用 VBA 在 Outlook 中获取通过即时搜索找到的电子邮件?

[英]How to fetch emails found by instant search in Outlook using VBA?

我使用 VBA 按其 pdf 附件的内容查找电子邮件。

据我了解,不打开每个 email 的唯一方法是即时搜索。

我找到了我要查找的电子邮件。 如何处理显示为结果的电子邮件?

我没有找到如何将它们保存到收藏或其他东西。

我的搜索代码:

Sub Search_Email()
Dim ol As Outlook.Application
Dim ns As Outlook.Namespace
Dim olFolder As Outlook.MAPIFolder
Dim strFilter, txtSearch As String

Set ol = New Outlook.Application
Set ns = ol.GetNamespace("MAPI")
Set olFolder = ns.Folders("RS Cash Application Inbox").Folders("Remittances")

Set ol.ActiveExplorer.CurrentFolder = olFolder

strFilter = "5860626494"

txtSearch = "attachment:" & strFilter

ol.ActiveExplorer.Search txtSearch, olSearchScopeCurrentFolder
End Sub

即时搜索的结果。 我需要从两个显示的电子邮件中下载附件。
截屏

调用Search时,查询是在用户界面中运行的,并且没有程序化机制来获取搜索结果。 此外, Search方法不提供回调以使开发人员能够确定搜索何时完成。

相反,我建议使用Application class 的AdvancedSearch方法,该方法提供回调以获取之后的结果。 在 Outlook 中使用 AdvancedSearch 方法的主要好处是:

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

要检索搜索结果,您需要处理AdvancedSearchComplete事件,该事件用于返回由AdvancedSearch方法创建的 object。 此事件仅在以编程方式执行AdvancedSearch方法时触发。

Public blnSearchComp As Boolean

Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
  MsgBox "The AdvancedSearchComplete Event fired."
  blnSearchComp = True
End Sub


Sub TestAdvancedSearchComplete()
  Dim sch As Outlook.Search
  Dim rsts As Outlook.Results
  Dim i As Integer
  blnSearchComp = False
  Const strF As String = "urn:schemas:mailheader:subject = 'Test'"
  Const strS As String = "Inbox"

  Set sch = Application.AdvancedSearch(strS, strF)

  While blnSearchComp = False
    DoEvents
  Wend

  Set rsts = sch.Results
  For i = 1 To rsts.Count
     MsgBox rsts.Item(i).SenderName
  Next
End Sub

在 Outlook UI 上使用Search后,您可以通过访问Explorer object 上的相应属性来访问CurrentView View class 提供了Filter属性,该属性返回表示视图过滤器的字符串值。 此属性的值是一个字符串,采用 DAV 搜索和定位 (DASL) 语法,表示视图的当前过滤器。 因此,您可以将其用于AdvancedSearch搜索字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM