[VBA]Outlookで受信したメールの添付ファイルを一括保存する

投稿者:

Microsoft Officeについているメールソフト「Outlook」には、複数メールの添付ファイルを一括で保存する機能が無い。なので、そういった処理をしたいときは、メールを一個ずつ開いて添付ファイルをディスクに保存していくしかない。だが、メール10件程度ならまだしも、これが100件、1000件となってくると、手動ではとてもやっていられない。

Microsoft Officeのアプリには共通のプログラミング言語VBA(Visual Basic for Application)が実装されており、アプリに標準で付いていない機能を自作して追加することができる。もちろんOutlookも例外ではない。VBAを使って上記の処理を作ってみようと思う。

VBAを記述するエディタはOutlook起動後Alt+F11で開くことがでる。もしくは[オプション]→[リボンのユーザ設定]で「開発」を有効にして、「Visual Basic」をクリック。エディタが開いたら[挿入]→[標準モジュール]でモジュールを追加。

プログラムの前提として、「ryoh@fineblue206.net」というアカウントの「受信トレイ」の下に「SUB」というフォルダがあり、添付ファイルを一括保存したいメールがそこにあるものとする。

受信トレイの下に「SUB」フォルダ

処理の流れ

処理の流れは次のようになる

  1. Accountオブジェクトを取得
  2. 「受信トレイ」のFolderオブジェクトを取得
  3. 「SUB」フォルダのFolderオブジェクトを取得
  4. 「SUB」フォルダ内のMailItemオブジェクトを取得
  5. MailItemのメンバであるAttachmentオブジェクトに対してSaveAsFileメソッドでファイルを保存

コードサンプル

Public Sub SaveAttachmentFiles()
    Dim oAccount As Account
    Dim folderINBOX As Folder
    Dim folderSUB As Folder
    Dim itemMail As Outlook.MailItem
    Dim strFilename As String
    Dim oAttachment As Attachment
    
    'アカウント取得
    Set oAccount = Application.Session.Accounts![ryoh@fineblue206.net]
    '「受信トレイ」の取得
    Set folderINBOX = oAccount.DeliveryStore.GetDefaultFolder(olFolderInbox)
    '「SUB」フォルダの取得
    Set folderSUB = folderINBOX.Folders.Item("SUB")
    
        
    'For Eachのループでメール(MailItemオブジェクト)を取得
    For Each itemMail In folderSUB.Items
        'For Eachのループで添付ファイル(Attachmentオブジェクト)を取得
        For Each oAttachment In itemMail.Attachments
            'ファイル名(フルパス)
            '(保存フォルダは仮のものです)
            strFilename = "D:\保存フォルダ\" & oAttachment
            'ディスクに保存する
            oAttachment.SaveAsFile strFilename
        Next
    Next
    
End Sub

このコードを実行すると「SUB」フォルダの中にあるメールの添付ファイルが全て”D:\保存フォルダ\”に保存されるはずだ。もし、このコードをコピーして使う場合は、フォルダの名前等を適時自分の環境に合わせて変えてください。

実行の方法は、「開発」リボンの[マクロ]から実行します。

開発リボンのマクロで実行

3件のコメント

  1. strFilename = “D:\保存フォルダ\” & itemMail.Attachments(1)

    ではなくて

    strFilename = “D:\保存フォルダ\” & oAttachment

    ではありませんか?

    1. ご指摘の通りでした。記事を修正しました。
      元のコードだと添付ファイルが複数あってもすべて保存されませんね。
      有難うございました。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください