- 締切済み
OutlookのVBAについて教えてください
はじめまして。 Outlookにて仕訳ルールの処理にて 特定のアドレスの方からのメールを仕訳け、さらに 添付ファイルを保存する。という処理を行っています。 添付ファイルの保存自体はネットでのVBAを参考に 作成することができました。 ただ、OutLook起動時に複数件、同じメールがある場合、 一番古いメールの添付ファイルのみが保存されてしまっているようです。 解決方法がわかる方、教えてください。 やりたいことは以下のとおりです。 宜しくお願い致します。 ■実現したいこと ・件名Aのメールの場合:添付ファイルをフォルダーAへ保存 ・件名Bのメールの場合:添付ファイルをフォルダーBへ保存 ・件名Cのメールの場合:添付ファイルをフォルダーCへ保存 ・件名Dのメールの場合:添付ファイルをフォルダーDへ保存 ■OutLookのVBA Public Sub SaveAttachments(objMsg As MailItem) Const SAVE_Dir = "C:\" Dim objFSO As Object Dim objAttach As Attachment Dim strFileName As String Dim c As Integer: c = 1 Dim flg As Integer: flg = 1 Dim SAVE_PATH As String Set objFSO = CreateObject("Scripting.FileSystemObject") ' 件名により、保存先のパスを変更します。 SAVE_PATH = SAVE_Dir If VBA.Right(SAVE_PATH, 1) <> "\" Then SAVE_PATH = SAVE_PATH & "\" Select Case objMsg.Subject Case "件名A" SAVE_PATH = SAVE_PATH & "フォルダーA" Case "件名B" SAVE_PATH = SAVE_PATH & "フォルダーB" Case "件名C" SAVE_PATH = SAVE_PATH & "フォルダーC" Case "件名D" SAVE_PATH = SAVE_PATH & "フォルダーD" Case Else flg = 0 End Select If VBA.Right(SAVE_PATH, 1) <> "\" Then SAVE_PATH = SAVE_PATH & "\" ' 指定のフォルダに添付ファイルを格納 If flg = 1 Then For Each objAttach In objMsg.Attachments With objAttach strFileName = SAVE_PATH & objAttach.FileName .SaveAsFile strFileName End With Next End If End Sub
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- a_green_wind
- ベストアンサー率75% (3/4)
No.2です。 質問の意味を勘違いしていました。申し訳ありません。 No.1の方のおっしゃる通りだと思います。 他の方法としては、メールの表題・添付ファイルごとに受信時刻(objMsg.SentOn)を記憶しておき、受け取ったメールの受信時刻が新しい場合のみ保存するようにしてはどうでしょうか。
- a_green_wind
- ベストアンサー率75% (3/4)
SaveAttachments に問題があるのではなく、SaveAttachments を呼び出す側に問題があると思います。 ですので、SaveAttachments を呼び出す側のプログラムを示してもらわないと回答できないと思います。
- monamucho
- ベストアンサー率63% (7/11)
仕訳けフォルダの中のメールアイテムを1件ずつ読み込んで、SubプロシージャSaveAttachments()をCallしているのかと想像しますが、 >複数件、同じメールがある場合 というのは、同じ件名で添付ファイルも同じ(同名、同数の)メールアイテムが複数件あるということですか? もしそうであれば、SaveAttachments()をCallするたびに、同じ件名のメールの同名の添付ファイルが上書き保存されているということではないでしょうか。 件名が同じメールアイテムでも、受信日時分秒?が取得できれば、 添付ファイルを保存するときに、添付ファイルのファイル名に時分秒の数字を付けて保存するようにすれば、上書き保存にならないで、すべての件名のメールアイテムの添付ファイルが保存できるようになるのではないでしょうか。
補足
回答ありがとうございます 同じ件名、添付ファイルも同一です。 1日に何通か同一メールがあり、 次回Outlook起動時に最新日時のファイルのみを保存したいのですが、一番古いメールの添付ファイルが保存されています。
補足
回答ありがとうございます。 仕訳ルールにて以下のルールを作成して 関数を実行しています。 (1)Aさんからのメールの場合、 (2)スクリプト「SaveAttachments」を実行する