添付ファイルをつけて全員に返信するマクロ


コメントにて以下のご要望をいただきました。


いつも役立たせていただいています。教えていただきたいことがあります。

■要望
添付ファイルがついたメールに対して返信するときに、そのファイルをそのまま添付して返信する方法を教えてください。
■使用環境
Windows7
outlook2010
■背景
宛先が複数人いる添付ファイルありのメールに対して返信する場合、その添付ファイルを手動でつけて全員に返信するようにしています。
この手間をなくす手段をご教示いただけないでしょうか。
通常に返信するとその添付ファイル情報は失われてしまいますが受信者はえてして添付ファイルを確認したくなるもので、その際にはメール検索するという手間が発生します。
容量サイズ増大によるリソース不足よりも時間リソースの確保を重視する時代かなと思っています。


Outlook には返信時に添付ファイルを残すというような設定はありません。
そのため、マクロで実現してみました。
なお、返信メールに添付ファイルを追加するという方法だと、リッチテキスト形式の返信で添付ファイルの位置がずれるなどの問題があるため、転送メールを作成して宛先を返信メールからコピーするという処理にしています。

マクロは以下の通りです。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub ReplyAllWithAttachments()
     Dim objItem As MailItem
     Dim objReply As MailItem
     Dim objForward As MailItem
     Dim recSrc As Recipient
     Dim recDst As Recipient
     '
     If TypeName(ActiveWindow) = "Inspector" Then
         Set objItem = ActiveInspector.CurrentItem
     Else
         Set objItem = ActiveExplorer.Selection(1)
     End If
     ' 転送メールと返信メールを作成
     Set objForward = objItem.Forward
     Set objReply = objItem.ReplyAll
     ' 転送メールの件名を返信にする
     objForward.Subject = objReply.Subject
     ' 転送メールの宛先に返信メールの宛先を指定
     For Each recSrc In objReply.Recipients
         strAddress = recSrc.Address
         If recSrc.AddressEntry.Type = "SMTP" And _
            strAddress <> recSrc.Name Then
             strAddress = """" & recSrc.Name & """ " & _
                          "<" & strAddress & ">"        
         End If
         Set recDst = objForward.Recipients.Add(strAddress)
         recDst.Type = recSrc.Type
         recDst.Resolve
     Next
     objReply.Close olDiscard 
     objForward.Display
End Sub

マクロの登録方法やメニューへの追加について

添付ファイルをつけて全員に返信するマクロ」への12件のフィードバック

  1. お世話になっております。
    添付ファイルをつけて全員に返信するマクロを活用させていただきました。
    大変ありがとうございます。
    そこで、本文にコメントを入れるために、下記のような文を書き実行したところ、元々のメールの書式ではなく、MS UI Gothicに変換されてしまいます。
    何を追加すると元の書式のまま文章を追加できるか、よろしければご教授ください。
    With objForward
    .Subject = “【○○依頼】” & objForward
    .Body = “よろしくお願い致します”
    End With

    • ご指摘ありがとうございます。
      確かに正式には objForward.Subject に値を代入する必要がありますので、コードを修正しました。
      ただ、実際には修正前のコードでも問題なく動作します。
      これは、Outlook などで使用される COM オブジェクトに既定のプロパティという概念があり、クラスごとにプロパティ名を省略した場合に参照されるプロパティが定義可能なためです。
      Outlook の MailItem クラスでは Subject が既定のプロパティとして定義されているため、objForward = 文字列 とすると、実際には objForward.Subject = 文字列 と記述したのと同じ意味になります。
      ただし、Dim で型宣言されていない変数については既定のプロパティが正常に動作しない可能性もあるので、正しくプロパティ名を指定すべきではあります。

  2. お世話になったおります。

    当該マクロを実行したところ、メールアドレスの部分が名前だけで、メールアドレスがひもづいていない
    ようでした。
    なので、下記のようにしたマクロで運用することにしました。
     修正前:strAddress = “””” & recSrc.Name & “”” ”
     修正後:strAddress = “””” & recSrc.Name & “”” “

    • 修正後の行がうまく表示できていませんでした
      修正後:strAddress = “””” & recSrc.Name & “”” ”
      です。

  3. 修正後の行がうまく表示できていませんでした。
    3度めの正直で反映されたらいいのですが・・・
     修正後:strAddress = “””” & recSrc.Name & “”” ”
      ※strAddressの末尾にで囲んだメールアドレスrecSrc.Addressを付ける。

    • 大なり/小なりの記号が送信でいないようです。
       「大なり/小なりの記号で囲んだメールドレスrecSrc.Addressを付ける」です。

      何度も上げてすみません。

  4. お世話になっております。

    こちらのマクロ日頃から活用させていただいており、
    大変感謝しております。

    一点お伺いしたいことがございますが、
    添付ファイルをつけて全員に返信するマクロの処理に加えて、
    署名を削除する機能を組み合わせたマクロを作成いただくことは可能でしょうか?

    マクロに下記3行を追記したましたが、エラーが出てしまい組み合わせることができませんでした。
    (引用元:https://outlooklab.wordpress.com/2015/10/03/)

    Set objWord = ActiveInspector.WordEditor
    Set objSignature = objWord.bookmarks(“_MailAutoSig”)
    objSignature.Range.Text = “”

    初歩的な質問で大変恐縮ですが、ご教授いただければ幸いです。

    • この3行はどこに追加されたのでしょうか?
      私が確認した限りでは、objForward.Display の後に追加すれば特に問題なく署名が削除されました。

匿名 にコメントする コメントをキャンセル

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中