VBAと言うとExcel向けの情報が多く、Outlookでの活用方法は探してもあまり出てこない。でも個人的には受信したメールをトリガーしてスクリプトでイチャイチャしたりはよくやる。
Outlookの参照
Set olApp = CreateObject("Outlook.Application")
Set olSession = olApp.Session
セッションの取得は、あるいはGetNamespace
メソッドによる名前空間の取得でも代替できる。GetNamespace
は名前空間の種類を表す文字列を引数に取るが、使用可能なのは「MAPI」のみ。このあたりはよくわからないので呪文だと思ってそのまま書く。いずれのメソッドを使っても、返り値はNamespaceオブジェクトになる。
メールの取得
Set olItems = olSession.Folders("受信トレイ").Folders("2015-08").Items
For Each olMail In olItems
MsgBox olMail.subject & ":" & Format(olMail.ReceivedTime, ' => テストメール : 2015/08/14
Next olMail
Set todayItems = olItems.Restrict("[ReceivedDate] = '" & Format(Date, "yyyy/mm/dd") & "'")
基本はNamespaceオブジェクトのFoldersプロパティでFolderオブジェクトのCollectionを取得し、さらにFolderオブジェクトのItemsメソッドでフォルダ内のメール全件が取得できる。全メールを順に処理するのであればFor Each
でループ処理すれば良いし、さらに条件で絞り込みたいのならRestrict
メソッドが使える。
なお、Itemsコレクションにはメールが順不同に収められているので、送信日時順に取り出したいなど、希望がある場合はSortメソッドを用いる形になる。
メール送付
Set olSendmail = olApp.CreateItem(0)
With olSendmail
.To = sendto@example.jp
.CC = sendcc@example.jp
.Subject = "test"
.Body = "こんにちは!" & vbCrLf & "2行目です!"
.Attachments.Add "C:\tempfile"
End With
olSendmail.Save
olSendmail.Close(0)
olSendmail.Send
OutlookのApplicationオブジェクトに対するCreateItem
メソッドによりMailItem
を作成する。なおCreateItemはメールに限らず、種々のItemを作成するためのメソッドであり、引数を0とした場合はMailItem、2とした場合は連絡先情報にあたるContactItem
オブジェクトが作られる。各引数は公式参照。
MailItemに各パラメーターを設定し、Save、Close、Sendによりメールが送付される。
オブジェクトの解放
使用した各オブジェクトは最後に解放する。ちゃんと見てないけど、解放しないとプロセスが消えないんではないか。。。
Set olApp = Nothing
Set olSession = Nothing
Set olMail = Nothing ...
結局のところオブジェクト指向型ではあるので、各オブジェクトのメソッドとプロパティを公式リファレンスで押さえていけばだいたいの操作は利用できるようになるかと思う。