如何基于当前视图获取活动文件夹中的前X个项目

时间:2019-07-09 10:30:11

标签: outlook-vba

我想找到一种基于排序顺序和用户可能已应用的过滤器来获取当前文件夹中前X个(例如10个)邮件项目的方法。

主要问题是文件夹的Items集合按日期顺序提供了所有邮件项目,并且没有明显的方法基于当前视图对集合进行排序和过滤。

Sub foo()

    Dim i As Long
    Dim objFolder As Outlook.Folder
    Dim objItem As Outlook.MailItem

    Set objFolder = Outlook.Application.ActiveExplorer.CurrentFolder

    For i = 1 To 10
        Set objItem = objFolder.Items(i)
        Debug.Print objItem.Subject
    Next i

End Sub

如果有人将我指向Outlook对象模型中的正确位置以便我可以实现这一点,那将是很好的。

1 个答案:

答案 0 :(得分:0)

您在正确的道路上。视图和您尝试在代码中使用的Items集合之间存在差异。

要在用户界面上应用过滤器,您需要使用以下属性和方法调用序列:

Explorer.CurrentView.SortFields

Explorer或Folder类的CurrentView属性返回一个表示当前视图的对象。通过View对象,您可以创建可自定义的视图,从而可以更好地对所有不同类型的数据进行排序,分组和最终查看。有多种不同的视图类型可提供创建和维护重要数据所需的灵活性。使用View对象的XML属性定义和自定义视图。 XML属性使您可以创建和设置自定义XML模式,该模式定义视图的各种功能。

View.Filter属性返回或设置一个表示视图过滤器的字符串值。该属性的值是D​​AV Search and Locating(DASL)语法中的字符串,表示视图的当前过滤器。有关使用DASL语法过滤视图中项目的更多信息,请参见Filtering Items

此外,您可以将View对象转换为TableView,并使用其属性来检测排序机制。 SortFields属性返回一个OrderFields对象,该对象代表一组字段,通过这些字段对TableView对象中显示的项目进行排序。

因此,您可以将检索到的过滤器应用于Items集合以获取正确的顺序。或者相反,可以在Outlook UI中设置顺序。

Private Sub FilterViewToLastWeek()  
 Dim objView As View 
 ' Obtain a View object reference to the current view.  
 Set objView = Application.ActiveExplorer.CurrentView 
 ' Set a DASL filter string, using a DASL macro, to show  
 ' only those items that were received last week.  
 objView.Filter = "%lastweek(""urn:schemas:httpmail:datereceived"")%" 
 ' Save and apply the view.  
 objView.Save  
 objView.Apply  
End Sub

最后,建议您观察View.XML属性,该属性返回或设置一个String值,该值指定当前视图的XML定义。 XML定义通过使用与视图本身的各种属性相对应的一系列标记和关键字来描述视图类型。创建视图后,将解析XML定义以呈现新视图的设置。

要确定创建视图时XML的结构,可以使用Outlook用户界面创建视图,然后可以检索该视图的XML属性。