![](/img/trans.png)
[英]how to save the outlook instant search result emails in hard drive folder
[英]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 方法的主要好處是:
Restrict
和Find
/ FindNext
方法可以應用於特定的Items
集合(請參閱 Outlook 中Folder
class 的Items
屬性)。IsInstantSearchEnabled
屬性)。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.