こんにちは。
Excel VBAからOutlookを操作する方法を、過去にいくつか備忘録しました。
これまで、作成するメールには、添付ファイルを1つだけ付けていたのですが、改めて添付ファイルの扱い方にフォーカスして備忘録しておきます。
■ 動作環境
OS: Windows 8.1(64ビット)
Excel: 2013(32ビット)
Outlook: 2013(32ビット)
■ Attachmentsコレクション
Attachmentsコレクションは、MailItemオブジェクトに格納された添付ファイル(Attachmentオブジェクト)の集合体です。AttachmentsコレクションのAdd / Removeメソッドを利用することで、添付ファイルを作成/削除できます。
□ Addメソッド
> MailItemオブジェクト.Attachments.Add(Source, [Type], [Position], [DisplayName])
引数 Source は、(フルパスの)添付ファイル名。
引数 Type は、添付ファイルの種類を表す OlAttachmentType 定数のいずれか。
引数 Position は、リッチテキスト形式の場合のみ有効。 値1の場合、メッセージ本文の先頭に配置。 メール本文の文字数より大きい値の場合、メール本文の末尾に配置。 値0の場合、添付ファイルは非表示。
引数 DisplayName は、リッチテキスト形式および Type がolByValueの場合のみ有効。
戻り値は、新しい添付ファイルを表すAttachmentオブジェクト。
引数 Type の設定値(OlAttachmentType)は次のとおり。
olByValue: 1、元のファイルのコピー。元のファイルが削除されてもアクセス可能。
olByReference: 4、Microsoft Outlook 2007 以降、この値はサポートされていません。olByValue を使用して、ファイル システムのファイルのコピーを添付。
olEmbeddeditem: 5、Outlookメッセージフォーマットファイル (.msg) で、元のファイルのコピー。
olOLE: 6、OLE ドキュメント。
1つのファイルを添付する場合は、こんな感じです。
引数 Source 以外は任意なので、手っ取り早く Source のみ指定してみました。
□ Removeメソッド
> MailItemオブジェクト.削除(Index)
引数 Index は、1から始まるオブジェクトのインデックス値を指定。
■ 複数のファイルを添付
複数ファイルを添付する場合は、Addメソッドをその回数分コールするだけです。^^
□ ツールの画面イメージ

□ 『ファイル指定』ダイアログ

※これ以降も同様ですが、「m_」で始まる英語大文字の変数名みたいな名称は、何れも私が別途定義している定数です。
基本的な考え方は、過去に備忘録した次の記事も合わせてご覧ください。
ここならではのポイントは、GetOpenFilenameメソッドから返された値(配列)をJoin関数で連結してセルに設定している点です。
□ メール作成/表示

ここでのポイントは、次のとおりです。
Join関数で連結してセル設定した値を、Split関数でまた分割し配列へ戻す
複数ファイルの数分、Addメソッドでファイルを添付(MailItemオブジェクトへ登録)
■ まとめ
いかがでしたでしょうか?
これで添付ファイルも自由に操れますね!「ファイル指定」ダイアログのフィルタを凝ることで、より幅広い制御を実現できます。
次回以降も、苦労した点を備忘録しようと思います。
Comments