【Outlook VBA】メールの添付ファイルをワンクリックで指定フォルダに保存する方法


outlook,vba,Attachment,saveasfile,eyecatch皆様こんにちは、ノグチです。

何度かの連載に分けて、Outlookで今ウインドウを開いているメールの添付ファイルを、ワンクリックで指定フォルダに保存する方法をご紹介しています。

【Outlook VBA】今開いているOutlookウインドウを操作しよう!Inspectorオブジェクトの取得
Outlook vbaで、メールの添付ファイルをワンクリックで指定フォルダに保存する方法を複数回記事にわたってご紹介していきます。今回は、ActiveInspectionメソッドで、今開いているOutlookウインドウのInspectorオブジェクトを取得する方法をご紹介しています。
【Outlook VBA】CurrentItemプロパティで今開いているメールのMailItemオブジェクトを取得する方法
Outlook VBAで、今開いているメールの添付ファイルをワンクリックで任意のフォルダに保存する方法を5ステップにわけて、連載記事でご紹介しています。今回は、InspectorオブジェクトのCurrentItemプロパティによるMailItemオブジェクトの取得についての説明です。
【Outlook VBA】今開いているメールのAttachmentsコレクションを取得する方法
何度かの連載で、Outlookで今開いているメールの添付ファイルを任意のフォルダに、ワンクリックで保存する方法をご紹介しています。今回は、メールの添付ファイルのオブジェクトがまとまったAttachmentsコレクションの取得についてのご紹介です。

メールの添付ファイルをフォルダに保存するコードを記述するにあたっては、下記5ステップを経てコーディングしていくことは、各回の記事の中でお伝えしている通りです。

  1. 今開いているOutlookのウインドウのInspectorオブジェクトを取得
  2. 取得できたInspectorオブジェクトからMailitemオブジェクトを取得
  3. 取得できたMailItemオブジェクトからAttachmentsコレクションを取得
  4. Attachmentsコレクションから添付ファイルのAttachmentオブジェクトを取得
  5. 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
  1. 今開いているウインドウのInspectorオブジェクトを取得
  2. InspectorオブジェクトのCurrentItemプロパティでMailItemオブジェクトを取得
  3. MailItemオブジェクトからAttachmentsコレクションを取得

というところまでコーディングできています。

上のコードで取得したAttachmentsコレクションは、添付ファイルのオブジェクトであるAttachmentオブジェクトがまとまったものであることは前回記事でご紹介しましたね。

今回記事では、このAttachmentsコレクションからAttachmentオブジェクトを取り出して、フォルダに保存するコードを書き加えていきましょう!

 ItemメソッドでAttachmentオブジェクトを取得

では早速、ステップ4.Attachmentsコレクションから添付ファイルのAttachmentオブジェクトを取得にある通り、前回記事で取得したAttachmentsコレクションからAttachmentオブジェクトを取得していきましょう。 

Attachmentオブジェクトとは

Attachmentオブジェクトは、Outlookのアイテム(メール、予定表、タスクなど)の添付ファイルそのものを操作するオブジェクトです。

Outlookアイテムの添付ファイルを保存したり削除したりといった操作をするためには、このAttachmentオブジェクトを取得せねばなりません。

Attachmentオブジェクトは、AttachmentsコレクションのItemメソッドで取得できます。
記述方法がこちら。
Attachmentsコレクション.Item(添付ファイルのインデックス番号)

Itemメソッドは省略してもOK

Attachmentsコレクションに限らず、コレクション内のオブジェクトはItemメソッドを使う他、コレクションに直接インデックス番号を指定することで、そのインデックス番号したコレクション内のオブジェクトを取得することができます。

なので、Attachmentsコレクションの後の.Itemを、このようにインデックス番号に置き換えてもAttachmentオブジェクトを取得することができますよ。

Attachmentsコレクション(インデックス番号)

SaveAsFileメソッドで取得した添付ファイルをフォルダに保存

Attachmentオブジェクトが取得できたら、後は指定フォルダに保存するだけです。

添付ファイルを保存するには、AttachmentオブジェクトのSaveAsFileメソッドを使います。

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,vba,添付ファイル,メール

上のコードを実行すると…
outlook,vba,添付ファイル,メール,フォルダに保存

この通り、指定したフォルダに、メールに添付されたファイルが全て格納されていますね

これで、メールの添付ファイルを指定フォルダに保存することができました!

 最後に

これまで複数記事にわたって、今Outlookのウインドウで開いているメールの添付ファイルを、ワンクリックで指定フォルダに保存する方法をご紹介してきました。

メールに添付されたファイルをフォルダに保存していくのって、添付ファイルが複数あると地味に手間だったりするんですよね。

保存先のフォルダが決まっているのなら、今回ご紹介した方法を使って、マクロ実行のワンステップでファイルを保存してしまうのも手ですよ。

それでは、最後までお読みいただきありがとうございました!

連載目次:Outlook VBAでメールの添付ファイルを操作しよう

Outlook VBAでメールの添付ファイルを指定フォルダにワンクリックで保存する方法をご紹介しています。1件ずつメールを開いて、添付ファイルをクリックして、保存先のフォルダを選んで...なんて地味に面倒な作業とはオサラバです。

  1. 【Outlook VBA】今開いているOutlookウインドウを操作しよう!Inspectorオブジェクトの取得
  2. 【Outlook VBA】CurrentItemプロパティで今開いているメールのMailItemオブジェクトを取得する方法
  3. 【Outlook VBA】今開いているメールのAttachmentsコレクションを取得する方法
  4. 【Outlook VBA】メールの添付ファイルをワンクリックで指定フォルダに保存する方法
  5. 【Outlook VBA】受信フォルダにあるメールの添付ファイルを指定フォルダに取り出す方法

タイトルとURLをコピーしました