【问题标题】:Outlook 2013, Outlook 2016 VBA rearrange folders in folders treeOutlook 2013、Outlook 2016 VBA 重新排列文件夹树中的文件夹
【发布时间】:2016-12-16 12:30:02
【问题描述】:
在 2007 年之后的 Outlook 版本中,Microsoft 增加了在文件夹树中手动排列文件夹的可能性(在 Outlook 2007 中,文件夹按字母顺序排列)。
是否有可能使用 VBA 在文件夹树中排列文件夹,例如包含新电子邮件时将文件夹放在顶部?
谢谢
【问题讨论】:
标签:
vba
outlook
directory
【解决方案1】:
从 Outlook 2013 开始,您可以随意对文件夹重新排序,Outlook 会记住该顺序。关键属性是PR_SORT_POSITION。这是定义:
定义 PR_SORT_POSITION PROP_TAG(PT_BINARY, 0x3020)
在向提供程序请求文件夹时,Outlook 将使用此属性作为其排序顺序的一部分,因此您的提供程序必须能够处理二进制属性的排序,或者在被要求按此属性排序时伪造它。 Outlook 在决定在可见树中的何处插入节点时也会直接使用此属性,因此当 Outlook 在文件夹中查找此属性时,您的提供程序可以返回此属性也很重要。
Outlook 将使用第二个属性进行自定义排序:
定义 PR_SORT_PARENTID PROP_TAG(PT_BINARY, 0x3021)
顾名思义,该属性存储了一个条目 ID,可用于在与其自然父节点不同的节点下对文件夹进行排序。一般情况下,一个文件夹会被排序在PR_PARENT_ENTRYID所代表的文件夹下。此属性允许您建议显示不同的父级。
通过适当地预设这些属性,您可以指导 Outlook 以您希望的方式对您的提供商的文件夹进行排序。如果您允许 Outlook 写入这些属性,您可以保留用户希望的任何排序顺序。
因此,理论上您可以从 VBA 设置这些属性。 PropertyAccessor 类可以帮助您完成此类任务。如果您面临来自 OOM 的任何限制,您也可以考虑使用低级代码,因此扩展 MAPI 周围的任何包装器都允许弥合差距(例如,赎回)。