【问题标题】:outlook macro advanced searchOutlook宏高级搜索
【发布时间】:2020-06-25 15:35:42
【问题描述】:

我想创建一个宏来对任务主题和可选的任务正文执行“高级搜索”。例如搜索“@Cris”

我已从 Excel 示例中复制并修改了此代码,但它没有运行。运行时错误。感谢任何帮助

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

【问题讨论】:

  • 错误来自哪一行?
  • 错误在最后一行 Set sch ....
  • 另外,我想补充一点,搜索支持像@这样的特殊字符很重要

标签: vba outlook


【解决方案1】:

您需要指定有效的范围和搜索条件。搜索的范围是文件夹的文件夹路径,而不是文件夹名称。建议文件夹路径用单引号括起来。否则,如果文件夹路径包含特殊字符(包括 Unicode 字符),则搜索可能不会返回正确的结果。要指定多个文件夹路径,请将每个文件夹路径用单引号括起来,并用逗号分隔单引号文件夹路径。

Filter 参数可以是任何有效的 DASL 查询。有关 DASL 查询的更多信息,请参阅Filtering Items

注意,您可以使用Chr Function 来表示搜索条件中的任何字符。

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

您也可能会发现Advanced search in Outlook programmatically: C#, VB.NET 文章很有帮助。

【讨论】:

  • 这个宏应该做什么?当我运行它时没有任何反应。 (outlook 菜单冻结)
【解决方案2】:

好的,这就是我的工作。

启动宏时:

  1. 它要求用户输入字符串
  2. 执行并提前搜索和搜索主题中的字符串(包括 @cris 等特殊字符)
  3. 创建搜索文件夹以显示搜索结果

以防它帮助其他人。我不知道如何像手动搜索那样创建输出。但这对我有用。

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

【讨论】:

    猜你喜欢
    • 2017-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2012-03-11
    • 2018-07-13
    • 2015-04-17
    相关资源
    最近更新 更多