メッセージの返信、転送時に本文の先頭に日付と時間を挿入するマクロ


コメントで以下のようなご要望をいただきました。


最近会社のメーラーがOUTLOOK2003になり、今まで使用してたメーラの機能に対してOUTLOOKにはないことに気づきました。
メールの新、返信、全員に返信、転送すべてのときに作成日と時間を挿入する方法を教えてください。
”テンプレートに自動で今日の日付を設定するマクロ”を見させていただきいろいろ試しましたが、全員への返信、転送(添付ファイル付)が
できません。


すべてのメール作成時において自動的に日付と時間を挿入するというのは困難です。というのも、単純にアイテムを開いたときに本文の先頭に日付と時間を挿入してしまうと、作成時以外や下書きにあるすでに日付を追加したメッセージに日付・時間を挿入してしまうからです。

ご要望の動作を実現するには、マクロによって返信・転送のメッセージを作成し、作成したメッセージの本文に日付と時間を挿入する必要があります。

以下はそのような動作を実行するためのマクロです。ReplyAllWithDate、ReplyWithDate、ForwardWithDate はそれぞれ「全員に返信」、「返信」、「転送」をマクロで実行し、本文に日付と時間を挿入した後でそのメッセージを表示します。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Sub ReplyAllWithDate()
    AddDateTimeInBody ActiveInspector.CurrentItem.ReplyAll
End Sub
'
Public Sub ReplyWithDate()
    AddDateTimeInBody ActiveInspector.CurrentItem.Reply
End Sub
'
Public Sub ForwardWithDate()
    AddDateTimeInBody ActiveInspector.CurrentItem.Forward
End Sub
'
Private Sub AddDateTimeInBody(objMail As MailItem)
    If objMail.BodyFormat = olFormatHTML Then
        Dim p As Long
        p = InStr(1, objMail.HTMLBody, "<BODY", vbTextCompare)
        p = InStr(p, objMail.HTMLBody, ">")
        objMail.HTMLBody = Left(objMail.HTMLBody, p) & "<p>" & _
            FormatDateTime(Now, vbShortDate) & " " & FormatDateTime(Now, vbShortTime) & _
            "</p>" & Mid(objMail.HTMLBody, p + 1)
    Else
        objMail.Body = FormatDateTime(Now, vbShortDate) & " " & FormatDateTime(Now, vbShortTime) & _
            vbLf & objMail.Body
    End If
    objMail.Display
End Sub

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

広告

メッセージの返信、転送時に本文の先頭に日付と時間を挿入するマクロ」への7件のフィードバック

  1. 最近、タイトルなし、本文なし、配信人なしの「豆腐メール」が世間様に大迷惑をかけているようです。この迷惑メールをOutlookのマクロで、たとえば受信次第削除するというようなことはできないものでしょうか?もしよろしかったらぜひ作ってください。お願いします。

  2. このマクロに似た物で、メールの新規作成時、返信時に本文の先頭にマクロで設定した好きな言葉を自動で挿入するマクロは作成できますでしょうか?無理いってすいません。もしよろしかったら作成してもらえないでしょうか?お願いします。

  3. To 2.8 さん返信時や転送時に特定の文字列を挿入するのであれば、上記のマクロで日付を挿入している箇所を特定の文字列に置き換えるということでよいでしょう。また、新規作成時に追加したいのであれば、テンプレートを使ったり、あらかじめ署名に入れておけばよいと思うのですが。なぜ、そのようなことが必要なのでしょうか?どういう状況で使うのかがわかれば、最適な方法がアドバイスできると思います。

  4. 「関係者以外展開禁止」のような文字を本文のはじめに入力したかったのです。ただ、Millefeuilleさんの言うとおりであらかじめ署名に入力してもよいのですが、署名の場合は本文を自動で改行してしまいます(2行目以降に署名で入力した文字が挿入される)。すみません。自分でもう少し考えて書きこみをするべきでした。

  5. To 2.8 さん新規作成でメールの本文に「関係者以外展開禁止」というような文字を入れるのであれば、あらかじめそのようなメールを作り、拡張子を OFT としてデスクトップなどに保存します。そして、メールを送りたいときにその OFT をダブルクリックすると本文の先頭に文字列が入ったメールが作成できます。また、返信時や転送時に「関係者以外展開禁止」を入れるのであれば、上記のマクロを以下のとおり変更します。変更前: If objMail.BodyFormat = olFormatHTML Then Dim p As Long p = InStr(1, objMail.HTMLBody, "<BODY", vbTextCompare) p = InStr(p, objMail.HTMLBody, ">") objMail.HTMLBody = Left(objMail.HTMLBody, p) & "<p>" & _ FormatDateTime(Now, vbShortDate) & " " & FormatDateTime(Now, vbShortTime) & _ "</p>" & Mid(objMail.HTMLBody, p + 1) Else objMail.Body = FormatDateTime(Now, vbShortDate) & " " & FormatDateTime(Now, vbShortTime) & _ vbLf & objMail.Body End If変更後: If objMail.BodyFormat = olFormatHTML Then Dim p As Long p = InStr(1, objMail.HTMLBody, "<BODY", vbTextCompare) p = InStr(p, objMail.HTMLBody, ">") objMail.HTMLBody = Left(objMail.HTMLBody, p) & "<p>関係者以外展開禁止</p>" & Mid(objMail.HTMLBody, p + 1) Else objMail.Body = "関係者以外展開禁止" & vbLf & objMail.Body End Ifちなみに、機密メールの転送を禁止したいというような要望であれば、文字列を入力するというような受信者の善意に頼るものではなく、Information Rights Management (IRM) のような技術を使ったほうがよいと思います。IRM を使うとメールや添付ファイルが暗号化され、転送だけでなく変更や印刷などを禁止することができます。IRM を使用するには Windows Server 2003 の Rights Management ServiceRMS が必要となりますが、こちらは無償でダウンロードできます。詳細は以下のページをご覧ください。http://www.microsoft.com/japan/office/previous/2003/editions/prodinfo/technologies/irm.mspxhttp://www.microsoft.com/japan/windowsserver2003/technologies/rightsmgmt/default.mspx

  6. outlookで新規作成のボタンを押したときに自動挿入というのは無理ですよね。私もいろいろ考えたのですが、Millefeuilleさんの案で行いたいと思います。マクロもちゃんと動きました!感謝しております。ありがとうございました。今回はoutlookでできる範囲で作成したかったので、IRMは使いませんでしたが、参考程度にリンクを読みました。ありがとうございました。

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中