2017-05-26 6 views
1

Microsoft Outlookを使用して、ユーザーが新しいOutlook電子メールで[送信]ボタンをクリックしたときに特定の添付ファイルの名前を変更しようとしています。VBAを使用して特定の添付ファイルの名前を送信ボタンで変更する

名前の添付ファイルが見つかった場合は、その添付ファイルの名前が電子メールの件名に変更されます。

以下の例では、ターゲット添付ファイルとして "form.pdf"を使用しています。

コードを実行してDisplayNameを変更しようとすると、電子メール内の実際の添付ファイルの名前は変更されません。何かアドバイス?これはReadMe.txtとしてEvil.exeを示すから人々を防ぐために、セキュリティ目的のために行われている -

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 
+0

あなたはそれを保存し、ファイル – 0m3r

答えて

0

Attachment.DisplayNameプロパティは、Outlook 2002があるため、絶対に何もしません。 Attachment.FileNameプロパティは読み取り専用です。

は理論的には、すべてがPR_ATTACH_LONG_FILENAMEプロパティ(DASL名http://schemas.microsoft.com/mapi/proptag/0x3707001F)に設定されている実行する必要がありする必要がありますが、あなたはPR_ATTACH_LONG_FILENAMEを設定するAttachment.PropertyAccessor.SetPropertyを使用する場合、Outlookは、例外が発生します。

Extended MAPIを使用してプロパティを設定することはできますが、C++やDelphiではアクセスできず、VBAや.Net言語ではアクセスできません。あなたは、VBAまたは任意の.NET言語で設定するRedemptionを使用することができます。

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 
+0

これが唯一の直接的な方法であることを残念ですが、それは意味を成しませんが再付着する必要があります。これありがとう。 –

関連する問題