outlook macro advanced search

心已入冬 提交于 2019-12-25 05:05:28

问题


I would like to create a macro to perform an "Advanced Search" on tasks subject and optionally tasks body. For instance search for "@Cris"

I have copied and modified this code from an example for Excel but it doesnt run. Runtime Error. Appreciate any assistance

Sub AdvancedSearchComplete()
    Dim rsts As Outlook.Results
    Dim i As Integer
    Dim strF As String
    Dim strS As String
    strS = "Tasks"
    StrName = InputBox("Search String?")
    strF = InStr(LCase("urn:schemas:tasks:subject"), StrName)

    Set sch = Application.AdvancedSearch(strS, strF, , "Search1")
End Sub

回答1:


You need to specify a valid scope and search criteria. The scope of the search is the folder path of a folder, not a folder name. It is recommended that the folder path is enclosed within single quotes. Otherwise, the search might not return correct results if the folder path contains special characters including Unicode characters. To specify multiple folder paths, enclose each folder path in single quotes and separate the single quoted folder paths with a comma.

The Filter parameter can be any valid DASL query. For additional information on DASL queries, see Filtering Items.

Note, you can use the Chr Function to represent any character in the search criteria.

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 for multiple folders
 Scope = "'" & Application.Session.GetDefaultFolder( _
olFolderInbox).FolderPath _
 & "','" & Application.Session.GetDefaultFolder( _
 olFolderSentMail).FolderPath & "'"
 'Establish filter
 If Application.Session.DefaultStore.IsInstantSearchEnabled Then
    Filter = Chr(34) & "urn:schemas:httpmail:subject" _
    & Chr(34) & " ci_phrasematch 'Office'"
 Else
    Filter = Chr(34) & "urn:schemas:httpmail:subject" _
    & Chr(34) & " like '%Office%'"
 End If
 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("Subject")
 Loop
End Sub

Also you may find the Advanced search in Outlook programmatically: C#, VB.NET article helpful.




回答2:


Ok, this is what I got to work.

When starting the macro:

  1. It Asks user to enter string
  2. Performs and advance search and search for string in subject (including special characters like @cris)
  3. Creates search folder to display search results

In case it helps anybody else. I don't know how to create an output like when doing a manual search. But this works for me.

Sub AdvSearchForStr()
    On Error GoTo Err_SearchFolderForSender
    Dim strFrom As String
    Dim strTo As String
    Dim strSearch As String

    strSearch = InputBox("Enter String to AdvSearch", "Advanced Search")

    strTo = "Test"

    Dim strDASLFilter As String
    strDASLFilter = "urn:schemas:httpmail:subject LIKE '%" & strSearch & "%'"

    Debug.Print strDASLFilter

    Dim strScope As String
    strScope = "'Inbox', 'Sent Items', 'Tasks'"

    Dim objSearch As Search
    Set objSearch = Application.AdvancedSearch(Scope:=strScope, Filter:=strDASLFilter, SearchSubFolders:=True, Tag:="SearchFolder")

    'Save the search results to a searchfolder
    objSearch.Save (strSearch)

    Set objSearch = Nothing
    Exit Sub

Err_SearchFolderForSender:
    MsgBox "Error # " & Err & " : " & Error(Err)

End Sub


来源:https://stackoverflow.com/questions/43638711/outlook-macro-advanced-search

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!