画像のようなマイクロソフトアウトルックのメッセージを選択し、
選択したメール内容をメモ帳で保存したいのです。
・メールの件名がそのままメモ帳の件名
・メールのメッセージ内容がそのままメモ帳の中身
となります。
メールの件名は170217021補助説明など、9ケタ(2017年の下二けた17から始まる6ケタ+3桁の連番+漢字の組み合わせです。
それを下記の場所に、件名に応じて、その日付(この場合17017)というフォルダをつくって、その中のさらに下層の楽天というフォルダをつくってその中に保存したいのです。
なお、フォルダがすでに存在している場合もあります。
★保存場所などは追加説明いたします。
途中エラーがでたときには、エラーがでたので中止しました。などと言ってくれるとありがたいです。
エクセルのVBAかUWSCでお願いいたします。
(それ以外にポイントはお付けできません)
お手数ですがよろしくお願いいたします。
★画像の保存場所は
C:\Users\zzzzzz\Desktop\PC移動受け\写真(現在)\170217\楽天
などになります。
zzzzzzは実際は個人名です。
★マイクロソフトアウトルックの保存場所は
C:\Users\zzzzzz\AppData\Local\Microsoft\Outlook\Outlook.pst
でした。その「自分の出品必要」というトレイになります。
Excel VBA でという指定がありますが、Excel のファイルに保存するわけでもなく、Excel を起動する意味がないと思うので、VBScript のコードです。
base_dir = "C:\Users\zzzzzz\Desktop\PC移動受け\写真(現在)\" Sub save_mail Set re = New RegExp re.Pattern = "^(\d{6})\d{3}" Set fs = CreateObject("Scripting.FileSystemObject") Set outlook = WScript.CreateObject("Outlook.Application") Set namespace = outlook.GetNamespace("MAPI") Set inbox = namespace.GetDefaultFolder(6) ' InBox Set mail_folder = inbox.Folders("自分の出品必要") For i = 1 To mail_folder.Items.Count Set mail = mail_folder.Items(i) Set ma = re.Execute(mail.Subject) If ma.Count > 0 Then folder = ma(0).SubMatches(0) file = mail.Subject If Not fs.FolderExists(base_dir & folder) Then fs.CreateFolder(base_dir & folder) fs.CreateFolder(base_dir & folder & "\楽天") End If If Not fs.FileExists(base_dir & folder & "\楽天\" & file & ".txt") Then Set f = fs.CreateTextFile(base_dir & folder & "\楽天\" & file & ".txt", True) f.Write(mail.Body) f.Close Else wscript.echo "File already exists. " & file End If Else wscript.echo "Bad title. " & mail.Subject End If Next ' outlook.Quit ' Outlook を終了させる Set outlook = Nothing Set fs = Nothing End Sub call save_mail
上記のコードを、savemail.vbs というような名前で保存して、コマンドプロンプトを起動して
d> cscript savemail.vbs
という感じで実行します。
# d> は、プロンプトのつもりです。
保存先の根っこになるディレクトリを、スクリプトの先頭で書いてますので、適宜変更してください。
他にも、「楽天」というサブディレクトリ名とか、受信メールのフォルダなど埋め込みで書いているところがいくつかあります。
メールの件名が数字9ケタで始まってない場合と、既に同名のファイルが存在する場合には、コマンドプロンプトにメッセージを出して処理をスキップするようにしています。
スクリプトの最後の方に、outlook.Quit という行をコメントアウトしていますが、これを活かすと起動中の Outlook を終了させます。
普段、Outlook を起動しっぱなしにしているなら、コメントアウトしたままの方が使いやすいと思います。
逆に、Outlook は必要なときにしか起動せず、メールを確認したらすぐに閉じてしまうような使い方をしているなら、コメントを外した方が良いと思います。
Excel VBA でという指定がありますが、Excel のファイルに保存するわけでもなく、Excel を起動する意味がないと思うので、VBScript のコードです。
base_dir = "C:\Users\zzzzzz\Desktop\PC移動受け\写真(現在)\" Sub save_mail Set re = New RegExp re.Pattern = "^(\d{6})\d{3}" Set fs = CreateObject("Scripting.FileSystemObject") Set outlook = WScript.CreateObject("Outlook.Application") Set namespace = outlook.GetNamespace("MAPI") Set inbox = namespace.GetDefaultFolder(6) ' InBox Set mail_folder = inbox.Folders("自分の出品必要") For i = 1 To mail_folder.Items.Count Set mail = mail_folder.Items(i) Set ma = re.Execute(mail.Subject) If ma.Count > 0 Then folder = ma(0).SubMatches(0) file = mail.Subject If Not fs.FolderExists(base_dir & folder) Then fs.CreateFolder(base_dir & folder) fs.CreateFolder(base_dir & folder & "\楽天") End If If Not fs.FileExists(base_dir & folder & "\楽天\" & file & ".txt") Then Set f = fs.CreateTextFile(base_dir & folder & "\楽天\" & file & ".txt", True) f.Write(mail.Body) f.Close Else wscript.echo "File already exists. " & file End If Else wscript.echo "Bad title. " & mail.Subject End If Next ' outlook.Quit ' Outlook を終了させる Set outlook = Nothing Set fs = Nothing End Sub call save_mail
上記のコードを、savemail.vbs というような名前で保存して、コマンドプロンプトを起動して
d> cscript savemail.vbs
という感じで実行します。
# d> は、プロンプトのつもりです。
保存先の根っこになるディレクトリを、スクリプトの先頭で書いてますので、適宜変更してください。
他にも、「楽天」というサブディレクトリ名とか、受信メールのフォルダなど埋め込みで書いているところがいくつかあります。
メールの件名が数字9ケタで始まってない場合と、既に同名のファイルが存在する場合には、コマンドプロンプトにメッセージを出して処理をスキップするようにしています。
スクリプトの最後の方に、outlook.Quit という行をコメントアウトしていますが、これを活かすと起動中の Outlook を終了させます。
普段、Outlook を起動しっぱなしにしているなら、コメントアウトしたままの方が使いやすいと思います。
逆に、Outlook は必要なときにしか起動せず、メールを確認したらすぐに閉じてしまうような使い方をしているなら、コメントを外した方が良いと思います。
ありがとうございました!これ以上はご迷惑をおかけするので、一度質問を終了しますね。
また本件等ご質問させていただくときにはぜひご協力いただけたら幸いです。
いつもありがとうございます。
うーん、もやもやします (´・ω・`)
ありがとうございました!これ以上はご迷惑をおかけするので、一度質問を終了しますね。
2017/02/07 18:14:23また本件等ご質問させていただくときにはぜひご協力いただけたら幸いです。
いつもありがとうございます。
うーん、もやもやします (´・ω・`)
2017/02/08 01:47:24