特定の件名を含むメールを受信した際に、差出人ごとのフォルダに添付ファイルを上書き保存するマクロ


コメントにて、以下のようなご要望をいただきました。


outlook2003sp3にて特定のメールアドレスから毎日エクセルファイルが送られてくるのですが、現在は手動で保存先を指定し毎日保存しており、特定の方は5人おり毎日処理に時間を割いていますが、6月から10人になり毎朝こんがらがっています。
これを自動で10人分のホルダーに上書き保存できないでしょうか
上書き保存でのマクロのご指導をお願いいたします


すべてのメールの添付ファイルを自動保存というのはちょっと乱暴と思ったので、件名に特定のキーワードが含まれている場合だけ送信者の名前のフォルダに添付ファイルを保存するというマクロを作りました。同じ名前のファイルが送られてきた場合は上書き保存となります。
マクロは以下の通りです。

' ここをトリプルクリックでマクロ全体を選択できます。
Const SAVE_PATH = "c:\attachments\" ' 添付ファイルを保存するフォルダを指定します。このフォルダの下に差出人ごとのフォルダが作成されます。
Const KEYWORD = "報告書" ' 件名に含まれるキーワードを指定します。
'
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem
    Dim objMail As MailItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = "MailItem" Then
        Set objMail = objItem
        SaveBySenderName objMail
    End If
End Sub
'
Public Sub SaveBySenderName(objItem As MailItem)
    Dim objFSO 'As FileSystemObject
    Dim strFolderName As String
    Dim objAttach As Attachment
    '
    If Instr(objItem.Subject,KEYWORD) > 0 Then
        strFolderName = SAVE_PATH & objItem.SenderName
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        ' フォルダがなければ作成します。
        If Not objFSO.FolderExists(strFolderName) Then
            objFSO.CreateFolder (strFolderName)
        End If
        ' 添付ファイルをすべて保存します。
        For Each objAttach In objItem.Attachments
            objAttach.SaveAsFile strFolderName & "\" & objAttach.FileName
        Next
    End If
End Sub

マクロの登録方法やメニューへの追加について

特定の件名を含むメールを受信した際に、差出人ごとのフォルダに添付ファイルを上書き保存するマクロ」への4件のフィードバック

  1. はじめまして。マクロド素人のみみです。

    アホみたいな質問で申し訳ございませんが、上記のマクロ文をそのままコピーして
    、cドライブの保存先フォルダーを変更し、そして、メールで受信する件名のところ
    を変更すれば、その件名で送られてきたメールの添付ファイルは、cドライブの保存
    先フォルダーへ保存されるという認識で間違ってませんでしょうか?

    申し訳ございませんが、ご教示お願いできますでしょうか。

    • おそらくご認識の通りです。
      たとえば、SAVE_PATH = “c:\attachments\” を SAVE_PATH = “c:\data\” にし、KEYWORD = “報告書” を KEYWORD = “データ” とすれば、件名に「データ」を含むメールの添付ファイルは c:\data に保存されるということになります。
      ただし、「Re:データ」というような懸命だったとしても添付ファイルが c:\data に保存されますので、完全一致にしたいのであれば

      If Instr(objItem.Subject,KEYWORD) > 0 Then

      If objItem.Subject = KEYWORD Then

      とする必要があります。

    • みみです。ご教示有難うございました。また、お礼が遅くなり申し訳ございません。
      ところで、もう1件ご教示いただけたらと思いますが、上記の特定の件名を含むメール
      を受信した際に、差出人ごとのフォルダに添付ファイルを上書き保存するマクロですが、
      このマクロを流用して、ALT + F11キーで マクロ入力画面が表示されるので、
      そこへペーストして保存するのはわかるのですが、このマクロを起動するのは、どのよ
      うにすればよろしいのでしょうか。

      デジタル証明書も取り込んでいるし、セキュリティセンター設定で、証明された証明書
      に対して警告を表示するにチェックを入れているのですが、保存してツールバーの実行
      矢印ボタンをおしても、空白のマクロの指定画面のみ表示されます。

      それとも、この状態でマクロを保存してOUTLOOKを再起動すれば、自動的に受信し
      た条件にあったメールが配信されてくれば、指定フォルダへ添付ファイルが保存され
      るということでしょうか。

      ちなみに、Exchange を使用していますが、上記のマクロでも大丈夫でしょうか。

      本当に申し訳ございませんが、何卒ご教示お願いします。

      • このマクロはメールを受信したときに Outlook が自動的に実行するものであり、ユーザーがマクロのメニューから実行することはできません。
        また、Exchange 環境の場合、Outlook を接続していないタイミングで受信したメールがマクロで処理されないので、SaveBySenderName を自動仕分けのアクションとして指定する必要があります。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中