ExcelVBAでのメールソフト(Outlook)の操作を、サンプルで紹介します。
VBAでのOutlook操作はあまり情報が出回っておらず、調べると意外と苦労すると感じたので、
入口となりそうなところを紹介します
▼目次
・準備~参照設定~
・1.受信フォルダを開く
・2.新規メールウィンドウを開く
・3.メール内容をマクロで入力
・まとめ
※最下部に完成ファイルを置いています。
■準備~参照設定~
準備としてOutlookオブジェクトを扱うための参照設定を行います。
VBEを開いて、メニューから「ツール」>「参照設定」を選択してください。
「Microsoft Outlook XX.X Object Library」にチェックを入れてOKを押してください。
※数字の所はバージョンですので、違っても問題ありません。
■1.受信フォルダを開く
まずは受信フォルダを開いてみましょう。
VBAを使ってOutlookオブジェクトを扱うことになりますが、全体像は以下となります。
▼オブジェクト構成図 Application ← Outlookアプリケーション ┗ nameSpace ← 各フォルダーへの入り口みたいなイメージ ┗ Folder ┳ 受信 (olFolderInbox) ←定数 ┣ 送信済 (olFolderSentMail) ┣ 削除済 (olFolderDeletedItems) ┣ 下書き (olFolderDrafts) ┣ など
ザックリ、Application ⇒ nameSpace ⇒ Folder とオブジェクトを取得するイメージです。
実際に書いたプログラムが以下です。
' 上記構成図を見ながら、受信フォルダーをオープンしてみる。 Sub 受信フォルダ() ' 各種オブジェクト変数 Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる Dim myNameSpace As Outlook.nameSpace ' nameSpaceオブジェクトを入れる Dim myFolder As Outlook.Folder ' フォルダを指定するのに使う ' outlookオブジェクトを作成してSetする呪文 Set outlookApp = CreateObject("Outlook.Application") ' nameSpaceオブジェクトを取得してSetする呪文 Set myNameSpace = outlookApp.GetNamespace("MAPI") ' フォルダーの指定(GetDefaultFolderの引数が、各フォルダに対応している) Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) ' フォルダを開く(ウィンドウが表示される) myFolder.Display ' メモリ上に残ったオブジェクトを解放 Set outlookApp = Nothing Set myNameSpace = Nothing Set myFolder = Nothing End Sub
どうしても呪文的な感じになってしまう箇所が多いです。
特に注目したいのは16行目で、GetDefaultFolderの引数にolFolerInboxを指定することで受信フォルダを開いています。
他のフォルダを開きたい場合にはここの値を変えてみて下さい。
▼よく使いそうな定数
定数 | 値 | 内容 |
olFolderInbox | 6 | 受信トレイ |
olFolderSentMail | 5 | 送信済みトレイ |
olFolderDeletedItems | 3 | 削除済みトレイ |
olFolderDrafts | 16 | 下書き |
olFolderJunk | 23 | 迷惑メール |
■2.新規メールウィンドウを開く
次は新規メールウィンドウを開いてみます。
オブジェクト構成図は以下です。
▼オブジェクト構成図 Application ← Outlookアプリケーション ┣ MailItem ← メールオブジェクト
こちらはかなりシンプルですね。
早速作ったサンプルが以下になります。
' 新規メールウィンドウを表示するマクロ Sub 新規メール() Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる Dim mailItemObj As Outlook.MailItem ' MailItemオブジェクトを入れる ' outlookオブジェクトを作成してSetする呪文 Set outlookApp = CreateObject("Outlook.Application") ' MailItemオブジェクトを作成してSetする呪文 Set mailItemObj = outlookApp.CreateItem(olMailItem) ' 新規作成ウィンドウを開く(ウィンドウが表示される) mailItemObj.Display ' メモリ上に残ったオブジェクトを解放 Set outlookApp = Nothing Set mailItemObj = Nothing End Sub
流れ的には、11行目で新規メールオブジェクト(空のMailItemオブジェクト)を作成して、
14行目でメール作成ウィンドウを開いています。
■3.メール内容をマクロで入力
最後に、新規メール作成時に送信先やタイトル等の情報をマクロで入力します。
自動送信の方法も併せて紹介します。
全体像は2と同じですが、MailItemの各プロパティを使います。
▼オブジェクト構成図 Application ← Outlookアプリケーション ┣ MailItem ← メールオブジェクト ┣ To ┣ CC ┣ BCC ┣ Subject ┣ body ┣ attachments
今回は、以下の様な入力フォームを作成し、入力されたデータを各プロパティに割り当てています。
作成したマクロは以下です。
' セルに入力した値から新規メールを作成するマクロ Sub メール作成ツール() '*** 変数宣言 ********************************** Dim outlookApp As Outlook.Application ' Outlookオブジェクトを入れる Dim mailItemObj As Outlook.MailItem ' MailItemオブジェクトを入れる Dim ws As Worksheet ' シート「メールツール」設定用 Dim toAdd As String ' Toアドレス Dim ccAdd As String ' ccアドレス Dim bccAdd As String ' Bccアドレス Dim title As String ' タイトル Dim body As String ' 本文 Dim attachments As String ' 添付ファイル '*** 変数セット ******************************** Set ws = ThisWorkbook.Worksheets("メールツール") '「メールツール」シート toAdd = ws.Range("C5").Value ' To ccAdd = ws.Range("C6").Value ' cc bccAdd = ws.Range("C7").Value ' bcc title = ws.Range("C8").Value ' タイトル body = ws.Range("C9").Value ' 本文 attachments = ws.Range("C10").Value ' 添付ファイル '*** 処理開始 ********************************** ' outlookオブジェクトを作成してSetする呪文 Set outlookApp = CreateObject("Outlook.Application") ' MailItemオブジェクトを作成してSetする呪文 Set mailItemObj = outlookApp.CreateItem(olMailItem) ' mailItemObj.SentOnBehalfOfName = "sak-teacher <aaaaa@bbb.com>" ' 差出人をセット mailItemObj.To = toAdd ' toアドレスをセット mailItemObj.CC = ccAdd ' ccアドレスをセット mailItemObj.BCC = bccAdd ' bccアドレスをセット mailItemObj.Subject = title ' 件名をセット mailItemObj.body = body ' 本文をセット ' 添付ファイルをセット(空だとエラーになるのでif文) If attachments <> "" Then mailItemObj.attachments.Add attachments End If ' 下書き保存 'mailItemObj.Save ' メール送信 ' mailItemObj.Send ' 新規作成ウィンドウを開く(ウィンドウが表示される) mailItemObj.Display ' メモリ上に残ったオブジェクトを解放 Set outlookApp = Nothing Set mailItemObj = Nothing End Sub
長くなりましたが、ベースは2と変わりません。
違うのは、「メールツール」シートに入力されているデータを取得し、
MailItemオブジェクトの「To」や「body」等のプロパティにデータを設定しています。
なお、コメントアウトしていますが34行目で差出人の設定ができます。
47行目や50行目を有効にすると、下書き保存や自動送信が可能になります。
逆に作成ウィンドウ表示が不要であれば、53行目はコメントアウトでかまいません。
■まとめ
以上、VBAでOutlookを操作してみました。
これだけで全てがカバーできるというものではないですが、
ベースのサンプルとしてコピペ等に活用してみて下さい!
今回作成したファイル
※作成したファイルはこちら ⇒ ダウンロード