如何使用vba过滤Outlook中未标记的项目

时间:2016-01-12 10:49:17

标签: excel vba email outlook outlook-vba

创建一个宏,从outlook中的所有未标记消息中提取一些数据。我可以通过使用循环并检查收件箱中每封邮件的状态来获取数据,但收件箱中的邮件数量很大。那么有没有办法只过滤未标记的项目,然后从过滤的邮件中获取数据。

我尝试了以下代码。然而它不适合我。

Mailbox = Cells(k, 1).Value

Set Fldr = olNs.Folders(Mailbox).Folders("inbox")
Fldr.Items.Restrict ("followupflag:unflagged")

有没有办法可以加速宏。

2 个答案:

答案 0 :(得分:0)

试试Restrict("[FlagStatus] = 0")。请记住,Restrict会返回Items集合的新实例。

答案 1 :(得分:0)

Outlook对象模型提供了以下方法来获取与您的条件相对应的项目子集:

  1. Items类的Restrict方法。有关详细信息,请参阅How To: Use Restrict method to retrieve Outlook mail items from a folder

  2. Items类的 Find / FindNext 方法。请参阅How To: Use Find and FindNext methods to retrieve Outlook mail items from a folder (C#, VB.NET)

  3. Application类的 AdvancedSearch 方法。见Advanced search in Outlook programmatically: C#, VB.NET。在Outlook中使用AdvancedSearch方法的主要好处是:

    • 搜索在另一个线程中执行。您不需要手动运行另一个线程,因为AdvancedSearch方法会在后台自动运行它。
    • 可以在任何位置搜索任何项目类型:邮件,约会,日历,备注等,即超出某个文件夹的范围。 Restrict和Find / FindNext方法可以应用于特定的Items集合(请参阅Outlook中Folder类的Items属性)。
    • 完全支持DASL查询(自定义属性也可用于搜索)。您可以在MSDN中的过滤文章中阅读有关此内容的更多信息。要提高搜索性能,如果为商店启用了即时搜索,则可以使用即时搜索关键字(请参阅Store类的IsInstantSearchEnabled属性)。
    • 最后,您可以随时使用Search类的Stop方法停止搜索过程。
  4. 最后,示例代码包含在文章中。