Outlookのテンプレートは使って定型文(や宛先、件名など)を保存しておけば、同じ内容のメールを作成するのがとても簡単で便利ですよね。
この記事では、さらにマクロを使ってOutlook テンプレートを動的に修正してもっと便利にする方法を紹介します。
この記事を読めば次のことがわかります。
- Outlookテンプレートの作成方法
- マクロからテンプレートを呼び出す方法
- テンプレートの内容をマクロで動的に修正する方法
メールのテンプレートを作成する
最初にOutlookのテンプレートの作成手順を説明します。
- 「ホーム」メニューの「新しい 電子メール」をクリックします。
- 宛先、件名、メッセージ本文などテンプレートとして使いたい内容を入力します。
- 「ファイル」メニューの「名前を付けて保存」をクリックします。
- 名前を付けて保存のダイアログボックスで、「ファイルの種類」で「Outlook テンプレート(*.oft)」を選択します。
- 保存場所を選択し、「ファイル名」に任意の名前(拡張子.oft)を入力して「保存」ボタンをクリックします
これでOutlookのテンプレートの作成は完了です。
テンプレートを使うときは保存した.oftファイルをダブルクリックで開きます。するとOutlookで保存されたメッセージが開きますので、適宜修正して使うことができます。
テンプレートをOutlookのマクロから呼び出す
テンプレートをダブルクリックして開くのと同じことをマクロで実行してみましょう。
Outlookに開発タブを表示する
Outlookに開発タブが表示されていない場合は、次の手順で表示させておきましょう。
- 「ファイル」タブ、「オプション」をクリックします。
- Outlookのオプションで「リボンのユーザー設定」をクリックし、「開発」のチェックボックスにチェクを入れます。
テンプレートをマクロで表示する
次にマクロからテンプレートを開いて表示させてみましょう。
- 「開発」タブ > 「Visual Basic」をクリックするか、「Alt+F11」で「Microsoft Visual Basic for Applications」を起動します。
-
「Project1」を右クリックし、「挿入」 > 「標準モジュール」を選択して標準モジュールを追加します。
既に「Module1」などの標準モジュールがあればそれを利用しても構いません。
-
ここでは「Module1」にマクロを追記します。「Module1」が開かれていなければ「Module1」をダブルクリックして開きます。
-
次のコードを記述します。
Application.CreateItemFromTemplateには先ほど保存したテンプレートのパスを指定します。
Sub displayTemplate() Dim myItem As Outlook.MailItem Set myItem = Application.CreateItemFromTemplate("C:\foo\sample.oft") myItem.Display End Sub
このコードの詳細は後述します。
- コードを記述し終えたら「Ctrl+S」で上書き保存します。
- 「開発」タブ > 「マクロ」の右側の「▼」をクリックして「Project1.displayTemplate」をクリックしてマクロを実行します。
これで先ほどと同じようにテンプレートが表示されれば成功です。
「マクロ」を「クイック アクセス ツール バー」に追加しておくと、もっと簡単にマクロを実行できるようになります。
それには「開発」タブ > 「マクロ」で右クリックして、表示されたメニューの「クイック アクセス ツール バーに追加」をクリックします。
テンプレートを表示するマクロの詳細
先ほどのコードの中身を見てみましょう。
Dim myItem As Outlook.MailItem Set myItem = Application.CreateItemFromTemplate("C:\foo\sample.oft")
Application.CreateItemFromTemplateメソッドの引数にはOutlookテンプレート(.oft)ファイルへのパスを指定します。
このメソッドはメールのメッセージを表すOutlook.MailItemオブジェクトを返します。
myItem.Display
myItem.Displayは別ウィンドウにメッセージを表示します。
このようにしてテンプレートをダブルクリックしたときと同じような動作になります。
動的にテンプレートのメッセージを修正するマクロ
先ほどはテンプレートのメッセージを表示するだけでした。
ここではマクロを使ってテンプレートの内容を動的に修正してみます。動的に修正することによって、例えばマクロを実行した日付の挿入するなどもっと便利にすることができます。
ここではメッセージの次の2つを動的に修正します。
- 件名
- 本文
この例ではテンプレートの「件名」と「本文」に次の文字列を含む「作業報告.oft」を使います。
MM/DD 作業報告
まずは全体のコードです。
Sub workReport() Dim myItem As Outlook.MailItem Set myItem = Application.CreateItemFromTemplate("C:\foo\作業報告.oft") today = FormatDateTime(Now, vbShortDate) mmdd = Right(today, 5) myItem.subject = Replace(myItem.subject, "MM/DD", mmdd) myItem.body = Replace(myItem.body, "MM/DD", mmdd) myItem.body = myItem.body & vbCrLf & "今日の作業はXXXです。" myItem.Display End Sub
このマクロを実行すると件名と本文の「MM/DD」を今日の日付に置き換えます。さらに本文には、改行した文字と"今日の作業はXXXです。"という文字列が追加されます。
それでは新しく追加されたコードを順に見ていきましょう。
次のコードは日付を取得します。
today = FormatDateTime(Now, vbShortDate) mmdd = Right(today, 5)
FormatDateTime(Now, vbShortDate) は、今日の日付を短い形式(例:2022/01/21)で返します。
Right(today, 5) で月と日の文字列を切り出しています。これによりmddには「01/21」が格納されます。
次のコードは件名と本文の文字列MM/DDを先ほどの月日で置き換えます。
myItem.subject = Replace(myItem.subject, "MM/DD", mmdd) myItem.body = Replace(myItem.body, "MM/DD", mmdd)
ここでは MailItemのSubjectとBodyプロパティを使っています。それぞれのプロパティの意味は次の通りです。
- MailItem.subject
- メッセージの「件名」の文字列を設定または返します
- MailItem.body
- メッセージの「本文」の文字列を設定または返します
したがって先ほどの2行は「件名」と「本文」の「MM/DD」という文字列ををmmdd(01/21)の値に置き換えたあと、MailItem.SubjectおよびMailItem.Bodyへ再び設定しています。
最後にメッセージ本文に改行文字と「今日の作業はXXXです。」という文字列を追加しています。
myItem.body = myItem.body & vbCrLf & "今日の作業はXXXです。"
まとめ
Outlookのテンプレートは便利ですが、マクロで動的に修正することによってさらに柔軟性が得られて便利になります。
ここでは日付の挿入と文字列の追加を行いましたが、マクロを使えばどんなことでもできます。こうできたらいいな、ということがあったら挑戦してみてはいかがでしょうか。