簡體   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