【问题标题】:Manipulating the item details of an outlook msg file in Windows Explorer using VBA使用 VBA 在 Windows 资源管理器中操作 Outlook msg 文件的项目详细信息
【发布时间】:2022-04-26 09:16:17
【问题描述】:

我已经从各种 Web 源中混合了一个 VBA 脚本,以将选定的 Outlook 2013 邮件项保存为文件系统上的 *.msg 文件。这很好用,但我想向 Windows 资源管理器 (Windows 7) 中显示的项目属性添加内容。

网络搜索引发了令人困惑的信息,因为大多数人似乎认为我想更改 CustomProperties 或 BuiltinProperties 但经过很长时间后,似乎 DSOfile dll 对其他一些 MS Office 文件所做的就是我需要的。

总之,我可以选择并运行一个宏来重命名邮件项目并将其作为 msg 文件保存到文件系统。我正在寻找一种方法,让文件系统上的这些项目在 Windows 资源管理器中查看时显示附加信息。也就是说,显示默认浏览器视图之外的一些信息的附加列。

此信息仅在 Windows 资源管理器中相关,以允许排序等。我不能涉及单独的数据库等。我还需要在 VBA 环境中执行此操作并且无权访问 Visio 等。

例如,Windows 资源管理器可以显示“发件人地址”和“发件人姓名”列。我想从 VBA 中为 Outlook 2013 msg 文件填充这些内容。

这可能吗?如果可以,怎么办?

【问题讨论】:

  • 您似乎需要自定义 Windows 资源管理器视图。该任务与 Outlook 完全无关。
  • 信息来自 .msg 文件,而不是 VBA。没有办法从 VBA 中完成。
  • 在我看来,我想要达到的目标对你来说并不明确。尽管如此,还是感谢您的贡献。
  • @EugeneAstafiev 信息来自 msg 文件,但它是 Windows 资源管理器的一个属性,用户通过右键单击列标题然后选择“更多”来指定要显示的列/属性打开对话框,允许您选择要显示的许多不同属性。
  • @DavidZemens 我确实使用了一般意义上的填充。我想更改文件属性。见:word.mvps.org/faqs/macrosvba/DSOFile.htm。我不是要更改资源管理器中的视图,而是要更改一些特定的文档属性。此外,我使用的示例细节并不重要。我只是想知道如何/是否可以修改属性。某些 Office 文件类型(例如 Word 和 Excel)可以使用 DSOFile.dll,但 DSOFile 似乎不适用于 Outlook msg 文件。因此,出于这个原因,这个问题是特定于 Outlook 的。

标签: vba outlook


【解决方案1】:

此功能适用于我的目的。

不完全是最干净的选项,但足够好,因为我可以在资源管理器中对特定列的项目进行排序。

Function setFileProps(filePath As String)
    Dim objFile As Object

    Set objFile = CreateObject("DSOFile.OleDocumentProperties")
    objFile.Open(filePath)
    ' Use "Authors" column to hold Sender's Name
    objFile.SummaryProperties.Author = mItem.SenderName
    ' Use "Comments" column to hold Sender's email address 
    objFile.SummaryProperties.Comments = mItem.SenderEmailAddress
    objFile.save

    set objFile = Nothing

End Function

mItem 是来自主 sub 的 mailItem,并且在保存 mailitem 后从那里调用此函数。

然后我在 Windows 资源管理器中设置目标文件夹以显示作者和评论列。

也许有“更清洁”的解决方案

【讨论】:

    【解决方案2】:

    必须在 MSG 文件使用的 OLE 存储级别上设置这些额外的属性 - StgCreateDocfileOnILockBytes / IPropertySetStorage::Create / IPropertySetStorage::WriteMultiple

    如果使用Redemption(我是它的作者)是一个选项,它会公开olMsgWithSummary 格式(类似于OOM 中的olMsgolMsgUnicode),这将满足您的需求。下面的脚本保存当前选中的 Outlook 邮件:

    set Session = CreateObject("Redemption.RDOSession")
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT
    set oMsg = Application.ActiveExplorer.Selection(1)
    set rMsg = Session.GetRDOObjectFromOutlookObject(oMsg)
    rMsg.SaveAs "c:\temp\ExtraProps.msg", 1035 '1035 is olMsgWithSummary
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多