何度かの連載に分けて、Outlookで今ウインドウを開いているメールの添付ファイルを、ワンクリックで指定フォルダに保存する方法をご紹介しています。
メールの添付ファイルをフォルダに保存するコードを記述するにあたっては、下記5ステップを経てコーディングしていくことは、各回の記事の中でお伝えしている通りです。
-
今開いているOutlookのウインドウのInspectorオブジェクトを取得
-
取得できたInspectorオブジェクトからMailitemオブジェクトを取得
-
取得できたMailItemオブジェクトからAttachmentsコレクションを取得
-
Attachmentsコレクションから添付ファイルのAttachmentオブジェクトを取得
-
AttachmentオブジェクトのSaveAsFileメソッドで、添付ファイルを任意フォルダに保存
前回の記事では、ステップ3の取得できたMailItemオブジェクトからAttachmentsコレクションを取得までご紹介しました。
今回はいよいよ仕上げ、ステップ4,5のAttachmentsコレクションから添付ファイルのAttachmentオブジェクトを取得とAttachmentオブジェクトのSaveAsFileメソッドで、添付ファイルを任意フォルダに保存についてご紹介していきます!
前回までのおさらい
さて、前回記事でステップ3までご紹介しました。
そのステップ3の段階でできたVBAのコードがこちら。
Sub SaveAttachmentFile() Dim objItem As Object Dim objIns As Inspector Dim objAttchments As Object Set objIns = Application.ActiveInspector Set objItem = objIns.CurrentItem '今開いているメールオブジェクトを取得 Set objAttchments = objItem.Attachments ’Attachmentsコレクションを取得 End Sub
- 今開いているウインドウのInspectorオブジェクトを取得
- InspectorオブジェクトのCurrentItemプロパティでMailItemオブジェクトを取得
- MailItemオブジェクトからAttachmentsコレクションを取得
というところまでコーディングできています。
上のコードで取得したAttachmentsコレクションは、添付ファイルのオブジェクトであるAttachmentオブジェクトがまとまったものであることは前回記事でご紹介しましたね。
今回記事では、このAttachmentsコレクションからAttachmentオブジェクトを取り出して、フォルダに保存するコードを書き加えていきましょう!
ItemメソッドでAttachmentオブジェクトを取得
では早速、ステップ4.Attachmentsコレクションから添付ファイルのAttachmentオブジェクトを取得にある通り、前回記事で取得したAttachmentsコレクションからAttachmentオブジェクトを取得していきましょう。
Attachmentオブジェクトとは
Attachmentオブジェクトは、Outlookのアイテム(メール、予定表、タスクなど)の添付ファイルそのものを操作するオブジェクトです。
Outlookアイテムの添付ファイルを保存したり削除したりといった操作をするためには、このAttachmentオブジェクトを取得せねばなりません。
Itemメソッドは省略してもOK
Attachmentsコレクションに限らず、コレクション内のオブジェクトはItemメソッドを使う他、コレクションに直接インデックス番号を指定することで、そのインデックス番号したコレクション内のオブジェクトを取得することができます。
なので、Attachmentsコレクションの後の.Itemを、このようにインデックス番号に置き換えてもAttachmentオブジェクトを取得することができますよ。
SaveAsFileメソッドで取得した添付ファイルをフォルダに保存
Attachmentオブジェクトが取得できたら、後は指定フォルダに保存するだけです。
添付ファイルを保存するには、AttachmentオブジェクトのSaveAsFileメソッドを使います。
メールの添付ファイルを指定フォルダに保存するコード
Sub SaveAttachmentFile() Dim objItem As Object Dim strFile As String Dim strPath As String strPath = "C:\Users\ryoku\Desktop\" 'ファイルを保存したいフォルダ Set objItem = Application.ActiveInspector.CurrentItem '今開いているメールオブジェクトを取得 With objItem '添付ファイルの数が0だったら処理終了 If .Attachments.Count = 0 Then MsgBox "メールに添付ファイルがありません。" Exit Sub End If strFile = strPath & .Attachments.Item(1) .Attachments.Item(1).SaveAsFile strFile End With End Sub
AttachmentオブジェクトはFor Each文でも取得できる
さて、上で「AttachmentsコレクションからItemメソッドでAttachmentオブジェクトを取得します!」と鼻息荒くご紹介しておいてなんですが、実は他にもAttachmentオブジェクトを取得する方法があります。
For Eachで取得
Attachmentオブジェクトは、For Each文でも取得することができます。
AttachmentsコレクションからAttachmentオブジェクト取得用のオブジェクト変数を定義して、こんな風に記述すればOK。
Sub SaveAttachmentFile() Dim objItem As Object Dim objIns As Inspector Dim strFile As String Dim strPath As String Dim objAttachment As Object Set objIns = Application.ActiveInspector Set objItem = objIns.CurrentItem '今開いているメールオブジェクトを取得 strPath = "C:\Users\ryoku\Desktop\添付ファイルを保存したいフォルダ\" 'ファイルを保存したいフォルダ With objItem For Each objAttachment In .Attachments strFile = strPath & objAttachment objAttachment.SaveAsFile strFile Next objAttachment End With End Sub
For Each文を使えばメールにいくつ添付ファイルがあっても、AttachmentsコレクションからAttachmentオブジェクトを取得して、全添付ファイルを指定フォルダに放り込んでくれます。
VBAを実行してメールの添付ファイルをフォルダに保存する
では、このFor eachを使ったコードを実行してみましょう。
たとえば、このようにテキストファイルが3つ添付されたメールを開いておいて、
この通り、指定したフォルダに、メールに添付されたファイルが全て格納されていますね。
これで、メールの添付ファイルを指定フォルダに保存することができました!
最後に
これまで複数記事にわたって、今Outlookのウインドウで開いているメールの添付ファイルを、ワンクリックで指定フォルダに保存する方法をご紹介してきました。
メールに添付されたファイルをフォルダに保存していくのって、添付ファイルが複数あると地味に手間だったりするんですよね。
保存先のフォルダが決まっているのなら、今回ご紹介した方法を使って、マクロ実行のワンステップでファイルを保存してしまうのも手ですよ。
それでは、最後までお読みいただきありがとうございました!
連載目次:Outlook VBAでメールの添付ファイルを操作しよう
Outlook VBAでメールの添付ファイルを指定フォルダにワンクリックで保存する方法をご紹介しています。1件ずつメールを開いて、添付ファイルをクリックして、保存先のフォルダを選んで...なんて地味に面倒な作業とはオサラバです。