【问题标题】:What is the VBA property for: Server folder contains x items?什么是 VBA 属性:服务器文件夹包含 x 个项目?
【发布时间】:2022-04-23 07:42:15
【问题描述】:

我喜欢将 Exchange 服务器上每个文件夹中的项目数量与本地 Outlook 文件中的项目数量进行比较。

在 Outlook 中,我可以使用以下方法获取每个文件夹的项目数

Dim Folder As Outlook.MAPIFolder
Set Folder = objNS.Folders("xxx").Folders("Inbox")
Debug.Print Folder.Items.Count

如何获取服务器上的项目计数,如下图所示?

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    要找出服务器(在线)文件夹中的项目数,您需要在在线模式下打开该文件夹。

    在扩展 MAPI(C++ 或 Delphi)中,您需要在调用 IMAPISession::OpenEntry 时使用 MAPI_NO_CACHE 位 - 您可以在 OutlookSpy 中使用该位(我是它的作者):单击 IMAPIFolder 按钮,选择 PR_ENTRYID属性,右键单击,选择 IMAPISession::OpenEntry,确保选中 MAPI_NO_CACHE。执行此操作后,您可以从 IMAPITable 内容表或从文件夹本身读取 PR_CONTENT_COUNT (0x36020003) MAPI 属性来检索计数。

    Outlook 对象模型不允许您覆盖每个文件夹/消息级别的缓存模式 - 整个配置文件必须具有正确的连接模式。

    如果是 C++ 或 Delphi 以外的语言,您可以使用 Redemption(我也是它的作者) - 它的 GetFolderFromIDGetMessageFromID 等版本允许传递标志以供 @987654329 使用@。

    MAPI_NO_CACHE = &H0200
    MAPI_BEST_ACCESS = &H0010
    set OomFolder = Application.ActiveExplorer.CurrentFolder
    set Session = CreateObject("Redemption.RDOSession")
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT
    set RdoFolder = Session.GetFolderFromID(OomFolder.EntryID, , MAPI_NO_CACHE Or MAPI_BEST_ACCESS)
    MsgBox "Number of items in the online folder: " & RdoFolder.Items.Count
    

    【讨论】:

    • 谢谢。我将无法对其进行测试,因此我不会将其标记为答案。您的回答启发了我解决方法:我只是在在线模式下再设置一次相同的电子邮件帐户,然后我可以使用上面的代码计算每个文件夹中的邮件(这将与服务器上的邮件完全相同)。然后我可以将其与离线帐户中的本地文件夹进行比较。这不是完美的解决方案,但它会完成这项工作。
    猜你喜欢
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 1970-01-01
    • 2019-06-04
    • 2011-07-01
    • 1970-01-01
    相关资源
    最近更新 更多