【问题标题】:Use VBA to Change the Name of Specific Attachment when the Send Button it Hit当点击发送按钮时使用 VBA 更改特定附件的名称
【发布时间】:2017-10-27 21:44:41
【问题描述】:

使用 Microsoft Outlook,当用户单击新 Outlook 电子邮件中的“发送”按钮时,我试图更改特定附件的名称。

如果找到具有该名称的附件,则会将该附件的名称更改为电子邮件的主题。

在下面的示例中,我使用“form.pdf”作为目标附件。

当我运行代码并尝试更改 DisplayName 时,它​​不会更改电子邮件中实际附件的名称。有什么建议吗?

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim myAttachments As Outlook.Attachments
    Set myAttachments = Item.Attachments

    For Each objAtt In myAttachments  

        If LCase(objAtt.DisplayName) = "form.pdf" Then
            objAtt.DisplayName = Item.Subject & ".pdf"
        End If

    Next
End Sub

【问题讨论】:

  • 您可能需要先保存然后重新附加文件

标签: vba outlook


【解决方案1】:

Attachment.DisplayName 属性自 Outlook 2002 以来完全没有任何作用 - 这样做是出于安全目的,以防止人们将 Evil.exe 显示为 ReadMe.txt。而Attachment.FileName 属性是只读的。

理论上,只需设置PR_ATTACH_LONG_FILENAME 属性(DASL 名称http://schemas.microsoft.com/mapi/proptag/0x3707001F),但如果您使用Attachment.PropertyAccessor.SetProperty 设置PR_ATTACH_LONG_FILENAME,Outlook 会引发异常。

您可以使用扩展 MAPI 来设置属性,但它只能在 C++ 或 Delphi 中访问,而不能在 VBA 或任何 .Net 语言中访问。您可以使用Redemption 将其设置为 VBA 或任何 .Net 语言:

set rSession = CreateObject("Redemption.RDOSession")
rSession.MAPIOBJECT = Application.Session.MAPIOBJECT
Item.Save
set rItem = rSession.GetRDOObjectFromOutlookObject(Item)
set attach = rItem.Attachments(1)
'PR_ATTACH_LONG_FILENAME_W
attach.Fields("http://schemas.microsoft.com/mapi/proptag/0x3707001F") = "whatever.pdf"
'PR_ATTACH_FILENAME_W
attach.Fields("http://schemas.microsoft.com/mapi/proptag/0x3704001F") = "whatever.pdf"
'PR_DISPLAY_NAME_W
attach.Fields("http://schemas.microsoft.com/mapi/proptag/0x3001001F") = "whatever.pdf"
rItem.Save

【讨论】:

  • 不幸的是,这是唯一直接的方法,但它确实有意义。谢谢你。
猜你喜欢
  • 1970-01-01
  • 2018-06-22
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多