質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

Q&A

解決済

1回答

2103閲覧

受信メールに添付された".msg"の中に添付されたファイルを自動的に保存したい。

jinyo

総合スコア59

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

0グッド

0クリップ

投稿2018/01/07 18:32

###前提・実現したいこと
<やりたいこと>
仕事の月間スケジュールが更新されるたびに、
A氏とB氏からメールで”月間スケジュール○○.xls”が送られてきます。
このファイルの更新頻度が非常に多いため、自動的に所定のフォルダに保存したいです。

<やったこと>
outlookの"仕分けルール"で"メール件名=月間"の条件にマッチした時に、仕分けルールの中の"スクリプトを実行する"で下記のマクロを適用しています。

###発生している問題・エラーメッセージ

<問題> ・A氏からは直接メールがくる。この場合は問題なし。 ・B氏からは、B氏のメールを受け取ったC氏から"メールを添付ファイルとして転送"として私宛に.msg形式で転送されてくる。 (B氏から直接わたしがメールをもらうことはNG) この場合、下記のマクロだと.msg形式でメールごと保存されてしまいます。

###該当のソースコード

Public Sub SaveMonthSchedule(objMsg As MailItem) ' 月間月間スケジュール用 Const SAVE_PATH = "D:\attachments\月間スケジュール\" '◆◆保存先 Dim objFSO As Object ' FileSystemObject Dim objAttach As Attachment Dim strFileName As String Dim C As Integer: C = 1 ' Set objFSO = CreateObject("Scripting.FileSystemObject") ' For Each objAttach In objMsg.Attachments With objAttach ' strFileName = SAVE_PATH & objAttach.FileName ' If objFSO.FileExists(strFileName) Then Else .SaveAsFile strFileName End If End With Next Set objMsg = Nothing Set objFSO = Nothing End Sub

###教えて頂きたいこと

outlookVBAで.msgの中に添付された.xls(または.xlsx)の情報へアクセスするにはどうしたら良いのでしょうか。
ご教示を宜しくお願い致します。

###補足情報(言語/FW/ツール等のバージョンなど)
Win7-Excel2007/Win2010-Excel2010

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

.msg形式でメールごと保存されてしまいます。

メール自体が添付されてるので、正常な動きですね。そのさらに中身を見たい場合は、一旦保存してから操作する必要がありそうです。
以下はB氏のパターンを前提としたサンプルです。A氏パターンと混在する場合は添付の拡張子で処理を切り替えてください。

VBA

1Sub GetNestedAttachment() 2 Dim a As Attachment 3 'テスト用のメール読み込み場所はActiveInspectorにしてます。 4 Set a = ActiveInspector.CurrentItem.Attachments(1) 5 6 '遅延バインディングは入力補完がなくて面倒なので参照設定前提で書いてます。 7 Dim fso As FileSystemObject: Set fso = New FileSystemObject 8 9 Dim tmpFilePath As String: tmpFilePath = fso.BuildPath(Environ("temp"), a.FileName) 10 a.SaveAsFile tmpFilePath 11 12 'メールオブジェクトにしてしまえば一時保存したものは消しても問題ない 13 Dim m As MailItem: Set m = Outlook.CreateItemFromTemplate(tmpFilePath) 14 fso.DeleteFile tmpFilePath 15 16 'テストなのでファイル名を出力するだけ。 17 Debug.Print m.Attachments(1).FileName 18End Sub

outlookVBAで.msgの中に添付された.xls(または.xlsx)の情報へアクセスするにはどうしたら良いのでしょうか。

添付された状態ではアクセス出来ませんでしたので、一旦、Excelファイルを保存した前提で良いですよね。
以下サンプルコードです。

VBA

1Sub ReadExcelFile(xl_file_path As String) 2 'Microsoft Excel X.X Object Libraryを参照設定している前提です。 3 'そうでない場合は、CreateObjectか、GetObjectを利用してください。 4 Dim xlApp As Excel.Application 5 Set xlApp = New Excel.Application 6 xlApp.Visible = True 7 Dim mainSheet As Worksheet 8 Set mainSheet = xlApp.Workbooks.Open(xl_file_path).Sheets(1) 9 Debug.Print mainSheet.Range("A1").Value 10 xlApp.DisplayAlerts = False 11 mainSheet.Parent.Close 12 xlApp.DisplayAlerts = True 13End Sub

Excel.Applicationオブジェクトを作ってしまえば、あとはExcelVBAと変わりません。

投稿2018/01/09 22:18

thom.jp

総合スコア686

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jinyo

2018/12/23 10:44

お礼が遅くなりましてたいっっッへん、申し訳ございません。 ご教示いただきました内容で運用させていただいております。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問