![](/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.