我正在使用VBA在Outlook中通过pdf附件的内容来查找邮件。从我了解的情况来看,唯一不打开每封邮件的方法是即时搜索。我找到了我要找的邮件。问题是,我不知道如何处理显示为结果的邮件。我没有找到如何将它们保存到收藏或其他东西的方法。我打破了我的牙齿在这两天了。请大家帮忙。我的搜索代码如下。
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
类,该类提供了回调后获取结果的功能。在Outlook中使用AdvancedSearch方法的主要好处是。
Restrict
和 Find
FindNext
方法可以应用到特定的 Items
集(见 Items
的财产 Folder
类)。)IsInstantSearchEnabled
属性)。)Stop
方法。要检索搜索结果,你需要处理搜索类的 AdvancedSearchComplete
事件,该事件用于返回由该事件创建的对象。AdvancedSearch
方法时,才会触发该事件。该事件只有在 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
在使用 Search
在Outlook用户界面上,您可以访问 CurrentView
通过访问相应的属性,在 Explorer
对象。该 View
类提供了 滤波器 属性,它返回一个代表视图过滤器的字符串值。这个属性的值是一个字符串,用DAV搜索和定位(DASL)语法,代表视图的当前过滤器。所以,你可以将它用于 AdvancedSearch
搜索字符串。