2014年3月24日月曜日

VBAでOutlookの署名を本文に挿入

まえがき

VBAでメール本文に署名を挿入する方法が見当たらなかったので調べてみました。

Outlookの署名を挿入する方法に関しては、国内だと、下記記事が比較的参考になるでしょうか。この記事では、Outlook2003を対象として、「署名」のコマンドバーを探し出して、直接VBAからボタンをクリックする方法がとられています。
上記コードでもエディタ部のフォーカス位置を操作すれば解決できそうではありますが…。GUIを直接操作するコードは、Ver.間の差異を吸収し難しいので避けたいと思い、もう少し探してみたところ、下記にまさに求めていた解説がありました。

ざっくりした解説

結論から言うと、Outlookの署名は、ファイルの形式(HTML,RTF,TXTの3種類)で下記フォルダに保存されているので、作成するメールの形式に応じて適宜読みだせばOKです。
  • Vista and Windows 7/8の場合
    • C:\Users\<UserName>\AppData\Roaming\Microsoft\Signatures
  • Windows XPの場合
    • C:\Documents and Settings\<UserName>\Application Data\Microsoft\Signatures
パスの取得には、VBAに組み込みのEnviron関数を用いると楽です。
例えば、署名の名前が「通常の署名」で、sigString変数にプレーンテキストで取り出したい場合の使用例は以下の感じ。
Dim sigName : sigName = "通常の署名"
Dim sigString : sigString = Environ("appdata") & "\Microsoft\Signatures\" & sigName & ".txt"

サンプルコード

以下のサンプルでは、絶対パスで署名ファイルを取り出してます。
注意点としては、署名ファイル(TXTファイル) がUTF-16エンコードになってる点でしょうか。

あとは、署名を文字列で取り出した後は、メール本文に結合しておしまいです。

雑感

GUIを操作するよりは取り回しは良さそうですが、将来的な互換性を考えると、なんかいまいちですね。