VBAを使って自動化に挑戦

 それでは、今度はもう少し実用的なプログラムを作ってみましょう。例えば、あなたがインターネット上で何か物を販売しているとしましょう。そして注文メールのサブジェクトには、必ず“○×△注文”と書かなければならないという規則があります。そこで自動仕分けを使って、サブジェクトにその文字が含まれていれば「注文書」フォルダに移動するよう定義しておきます。
 ここまでは、Outlook上で手作業で設定しておくことにしましょう。VBAを使って自動化したいのは、注文書を受け取った後に「注文書を受け取りました」という確認メールを出す部分です。いちいち手で注文メールを開いて返信するのは、いかにも大変な作業です。ならば、新規に到着した注文書に対しては、自動的に返信メールを送信できるようにしてしまいましょう(リスト2)。

リスト2:新着注文書の自動返信マクロ

 ' 新規メール受信時
 Private Sub Application_NewMail()
     Dim myItem As Outlook.MailItem	 ' MailItemオブジェクト
     Dim myFolder As Outlook.MAPIFolder	 ' MAPIFolderオブジェクト
     Dim myNameSpace As Outlook.NameSpace ' NameSpaceオブジェクト   
 
     ' NameSpaceオブジェクトの取得
     Set myNameSpace = Application.GetNamespace("MAPI")
 
     ' 「受信トレイ」のオブジェクトを取得
     Set myMailFolder = myNameSpace.GetDefaultFolder(olFolderInbox)   
 
     ' 「注文書」フォルダのオブジェクトを取得
     Set myFolder = myMailFolder.Folders("注文書")
 
     ' 「注文書」フォルダ内のすべてのアイテム数ループ
     For i = 1 To myFolder.Items.Count
         ' MailItemオブジェクトを取得
         Set myItem = myFolder.Items(i)
 
         ' 未読のメールのみに処理を行なう
         If myItem.UnRead = True Then
             ' 返信用オブジェクトを作成
             Set myReply = myItem.Reply
             ' Subjectに“注文書を受け取りました”を設定
             myReply.Subject = "注文書を受け取りました"
             ' 返信を送信
             myReply.Send
 
             ' メッセージを既読に設定
             myItem.UnRead = False
         End If
     Next i
 End Sub

 リスト2を入力したら、ちゃんと動作するかどうか検証してみます。一番手っ取り早いのは、自分で自分に注文書を発行してみることです。Subjectに“○×△注文”と設定して宛先を自分のアドレスにするだけです。できたらメッセージも加えて送信してみてください。送信トレイに「注文書を受け取りました」というSubjectのメールが入っていれば成功です(図10)。

図10:“注文書を受け取りました”というSubjectのメールを確認してみる

 この応用例としては、たとえば迷惑メールが届いた場合、「迷惑です!」とSubjectをつけて返信し、メールは破棄するということもできるでしょう。さらに添付ファイルをつけて返すということも簡単にできます。たとえば、「カタログ.doc」というファイルを添付したければ、リスト3のコードを追加すればいいのです。
 このように、ほとんどすべてのイベントやアクションに対応したオブジェクトが操作できるので、通常は手動で実現している操作も、かなり自動化できることがおわかりいただけたでしょうか。 今までOutlookを使っていて、面倒だと思っていた作業があれば、是非、マクロの自動化に挑戦してみてください。

リスト3:添付ファイルを追加して返信する場合

 ' Attachmentsコレクションを取得
 Set myAttachments = myReply.Attachments
 ' 添付ファイルを追加
 myAttachments.Add "カタログ.doc", olByValue