【问题标题】:Display all e-mails with certain category in Outlook在 Outlook 中显示具有特定类别的所有电子邮件
【发布时间】:2021-12-29 07:52:53
【问题描述】:

我想创建一个宏来显示特定类别的所有电子邮件。到目前为止我正在使用

    Sub GDPR()
Dim myOlApp As New Outlook.Application 
txtSearch = "category:=(""Personal Data"")"
myOlApp.ActiveExplorer.Search txtSearch, olSearchScopeAllFolders 
Set myOlApp = Nothing
End Sub

它有效,但有点奇怪,因为它还显示没有任何类别的电子邮件,但在正文中包括个人数据。 我认为category:= 语法仅适用于类别,使用它只会返回分类的电子邮件。

除了使用搜索功能宏之外还有什么更好的方法来实现吗?

【问题讨论】:

    标签: vba outlook vba7


    【解决方案1】:

    Search 方法接受一个搜索字符串,该字符串可以包含Instant Search 支持的任何有效关键字。它的行为就像用户在即时搜索用户界面中键入查询字符串然后单击搜索一样。您在 Outlook 的 UI 上获得相同的结果吗?

    当调用Search 时,查询是在用户界面中运行的,并且没有程序化的机制来获取搜索结果。有关即时搜索的详细信息,请在 Outlook 帮助中查询“即时搜索”。此外,Search 方法不提供回调让开发者判断搜索何时完成。

    我建议改用Application 类的AdvancedSearch 方法。在 Outlook 中使用 AdvancedSearch 方法的主要好处是:

    • 搜索在另一个线程中执行。您无需手动运行另一个线程,因为 AdvancedSearch 方法会在后台自动运行它。
    • 可以在任何位置(即超出某个文件夹的范围)搜索任何项目类型:邮件、约会、日历、便笺等。 RestrictFind/FindNext 方法可以应用于特定的 Items 集合(请参阅 Outlook 中 Folder 类的 Items 属性)。
    • 完全支持 DASL 查询(自定义属性也可用于搜索)。您可以在 MSDN 中的 Filtering 文章中阅读有关此内容的更多信息。为了提高搜索性能,如果为商店启用了即时搜索,则可以使用即时搜索关键字(请参阅Store 类的IsInstantSearchEnabled 属性)。
    • 您可以随时使用 Search 类的 Stop 方法停止搜索过程。
    • 能够将结果保存到搜索文件夹,因此结果将在 Outlook UI 中可见。
    • 搜索过程完成后会通知您。

    Advanced search in Outlook programmatically: C#, VB.NET 文章中阅读有关AdvancedSearch 方法的更多信息。

    另外,如果您不需要在 UI 中显示结果,您可以考虑使用 Items 类的 Find/FindNextRestrict 方法。您可以在以下文章中阅读有关它们的更多信息:

    【讨论】:

    • 谢谢,我猜这就是我需要的。高级搜索。我现在需要的是一个宏,它将自动打开带有预定义查询的高级搜索窗口,如下所示:类别完全是个人数据。
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2018-01-02
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2019-06-24
    相关资源
    最近更新 更多