リッチテキストなメールテンプレートを開きメールの件名と本文の文言を置換する Outlook マクロ

普段は Thunderbird を使っているが、会社で Outlook を使わされている。Outlook も、Excel や Word と同じように VBA (マクロ) が使えるので、少しマクロを書いてみた。

いつも週次で送っているメールがあり、本文の内容はそのままに、件名と本文にある日付のみを書き換えて送っている。毎週同じことをするのはバカらしいので、これを自動化した。

前提

対象は Outlook 2007・2010。リッチテキスト形式のメールしか送受信しないので、以下はリッチテキスト形式のメールテンプレートを操作するマクロとして読んでほしい。

メールテンプレートの用意

マクロを作る前に、メールテンプレートファイルを .oft 形式で用意する。

リッチテキスト形式のメールを新規作成し、宛先、件名、本文などを書く。フォント設定などあれば予めしておくが吉。この時、あとで自動置換させたい部分は「【今日日付】」と黒カッコで囲うなどして、一意に特定できる文字列にしておく。個人的には「★1★」「★2★」と、置換する箇所に「★」マークを置くのをオススメ。★マークなんてメールで使わないので、万が一置換漏れがあったりした時は気付きやすいからだ。

ここでは、以下のようなテンプレートを作成したものとして話を進める (メールの中身は適当、実際のオシゴトとは一切関係ありません)。

宛先:(色々設定しておく)
CC :(色々設定しておく)
件名:【週次連絡】【今日日付】 分の報告書について

本文:

宛先各位
お疲れ様です。Neo です。

今週の報告書を作成しました。
詳細はポータルサイトよりご確認ください。
確認期限は、明日 【明日日付】 の15時までです。

以上です。

このメールの件名の「【今日日付】」部分、本文の「【明日日付】」部分をそれぞれ置換する。

メールができたら「名前を付けて保存」より、「Outlook テンプレート (*.oft)」形式で適当なフォルダに保存する。これでメールテンプレートの準備ができた。

参照設定

まずは Outlook 上で Alt + F11

VB Editor が開くので、「ツール」→「参照設定」より、「Microsoft Word 12.0 Object Library (Outlook 2007 の場合)」にチェックを入れる。Outlook 2010 の場合はバージョンが 14.0 になっている、同じものがあるはずだ。

後述するが、この参照設定は必須ではない。

マクロ作成

次に「標準モジュール」を新規作成し、以下のようなマクロを書く。

Sub メールテンプレート起動と文字列置換()
    Dim mail As Outlook.MailItem
    Set mail = Application.CreateItemFromTemplate("C:\メールテンプレート.oft")
    mail.Display
    
    ' 件名の置換
    mail.Subject = Replace(mail.Subject, "【今日日付】", Format(Date, "mm-dd"))
    
    ' 本文の置換
    With Application.ActiveInspector.WordEditor.Range(0, 0)
        With .Find
            .Text = "【明日日付】"
            .Replacement.Text = Format(DateAdd("d", 1, Date), "mm/dd(aaa)")
            .Execute Replace:=wdReplaceAll
        End With
    End With
End Sub

ポイントは以下のとおり。

あとはお好みに合わせてカスタマイズしてください

WordEditor でのカーソル位置の設定とかがイマイチうまくできなくて、苦肉の策で SendKeys を多用する無茶苦茶なマクロを別途書いたりしていたが、テンプレートの内容はしばらく変わらないし、ひとまずこれで良い感じ。

参考