我想对多个单词的消息进行高级搜索,而不必手动/单独搜索每个单词。
如果我可以在Outlook 2016中记录一个宏,据我所知,我不能这样做,以下是我会做的命令:
- 录制宏
- 单击搜索当前邮箱
- 单击搜索工具
- 单击高级搜索
- 对于"In:"之后的下拉列表,请选择"常用文本字段">
- 在"搜索单词:"中键入要查找的文本
(在那里输入多个单词意味着查找所有单词中的一个字符串,而不是单独查找每个单词。( - 单击"立即查找">
- 停止录制宏
- 编辑生成的VBA代码以:
- 指定要查找的其余单词
- 指定不区分大小写
- 然后执行"立即查找">
然后我想把它们全部显示出来
最好进行排序,但如果会使代码变得更复杂,则不必进行排序。
把网上找到的代码拼凑在一起,我得到了下面的代码。
- Subject是我唯一可以使用debug.print的值。其他值给出了错误:
"运行时错误"5":过程调用或参数"无效;。
- 我只知道如何搜索主题
- 我不知道如何显示我发现的内容列表(不在即时窗口中(
' Test VBA for Multiple-Word Search in Outlook - 3
Sub TestSearchForMultipleFolders()
Dim Scope As String
Dim Filter As String
Dim MySearch As Outlook.Search
Dim MyTable As Outlook.Table
Dim nextRow As Outlook.Row
m_SearchComplete = False
'Establish scope folder
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath & "'"
Debug.Print Scope
'Establish filter
If Application.Session.DefaultStore.IsInstantSearchEnabled Then
Filter = Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'Office'"
Debug.Print Filter
Filter = Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'rent'" _
& " OR ""urn:schemas:httpmail:subject" & Chr(34) & " ci_phrasematch 'breaking'"
'(subject:invoice OR body:invoice) AND hasattachments:yes NOT from:Amazon
Else
Filter = Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " like '%Office%'"
End If
Debug.Print Filter
Set MySearch = Application.AdvancedSearch(Scope, Filter, True, "MySearch")
'While m_SearchComplete <> True
' DoEvents
'Wend
Set MyTable = MySearch.GetTable
Do Until MyTable.EndOfTable
Set nextRow = MyTable.GetNextRow()
'Debug.Print nextRow("SentOnBehalfOf")
' Debug.Print nextRow("From")
' Debug.Print nextRow("ReceivedTime")
Debug.Print nextRow("Subject")
Loop
End Sub
Outlook不提供像Word或Excel那样的宏记录器。您需要在Outlook中手动创建VBA宏。
以编程方式在Outlook中进行高级搜索:C#,VB.NET文章解释了如何在Outlook中使用AdvancedSearch
方法。
Outlook对象模型还提供
AdvancedSearchStopped
事件。AdvancedSearchStopped
和AdvanvedSearchComplete
事件处理程序的签名是相同的。当对Search对象调用Stop
方法以取消搜索时,会触发AdvancedSearchStopped
事件。然而,无论如何,AdvancedSearchComplete
在之后被调用。
诚然,
Search
类允许您将搜索结果保存在搜索文件夹中(实际上,它不包含任何项目,只引用范围文件夹中的项目(。您只需要在AdvanvedSearchComplete
事件处理程序中的Search对象上调用Save
方法。
例如,在VBA中,可以通过以下方式定义AdvanvedSearchComplete
事件处理程序:
Public m_SearchComplete As Boolean
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
If SearchObject.Tag = "MySearch" Then
m_SearchComplete = True
End If
End Sub