LoginSignup
6
7

More than 5 years have passed since last update.

VBA for Outlook

Last updated at Posted at 2015-08-14

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 ...

結局のところオブジェクト指向型ではあるので、各オブジェクトのメソッドとプロパティを公式リファレンスで押さえていけばだいたいの操作は利用できるようになるかと思う。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7