Outlook VBA
メールボックスのパンクを回避するため、確認したメールをファイル名「受信日時_件名.msg」でフォルダに保存したいあなたへ
Sub メール保存()
'① 開発タブの表示
' [ファイル]-[オプション]-[リボンのユーザー設定]-[「開発」タブにチェックを入れる]-[OK]
'② マクロを有効にする
' [ファイル]-[オプション]-[トラストセンター]-[トラストセンターの設定]-[マクロの設定]-[すべてのマクロを有効にする]
' ※ メールの添付ファイルを開いたときに、悪意のあるマクロが実行されないよう
' マクロ実行後は、マクロを無効にする設定に戻す。
'③ VBEを開く(Alt + F11)➡ 標準モジュールを開く(Alt → I → M)➡このテキストをコードウィンドウに貼り付け
'④ 保存したいメールを開いた状態で、マクロを実行(F5)
Dim myItem As Outlook.Inspector
Dim objItem As Object
Set myItem = Application.ActiveInspector
Set objItem = myItem.CurrentItem
'受信日時取得
Dim fnTimestamp As String
On Error Resume Next
fnTimestamp = Format(objItem.ReceivedTime, "yyyy.mm.dd(aaa)hhnn_")
If Err.Number <> 0 Then
' エラーが発生したら受信日時ではなく最終更新日時とする'
fnTimestamp = Format(objItem.LastModificationTime, "yyyy.mm.dd(aaa)hhnn_")
Err.Clear
End If
On Error GoTo 0
'件名取得
strName = objItem.Subject
strName = Replace(strName, " ", "")
strName = Replace(strName, ":", ":")
strName = Replace(strName, "\", "¥")
'メールを指定のフォルダにファイル名「受信日時_件名.msg」で保存
objItem.SaveAs "C:\Users\...\メール保存" & "\" & fnTimestamp & strName & ".msg"
'★先頭の「" "」内に、保存するフォルダのパスをエクスプローラからコピー・ペーストしてください★
'★Itemメソッド.受信メール内の各データを取得・設定するプロパティ
' .ReceivedTime 受信日時
' .LastModificationTime 最終更新日時
' .SenderName 送信者の表示名
' .SenderEmailAddress 送信者の電子メールアドレス
' .Subject 件名
'★保存終了後、メールの削除は自分でやります。
End Sub
参考文献・リンク
- Satoshi「非IT企業に勤める中年サラリーマンのIT日記」Outlook/VBA: メールをボタン1つで指定フォルダに保存するマクロ,2018/04/05.
https://pineplanter.moo.jp/non-it-salaryman/2018/04/05/outlook-saveto-folder/
- あほくす「ahox.jp」選択中のアイテムを受信時刻と件名のファイル名で保存する: Outlook VBA,2020/08/25.
http://ahox.jp/prog/2020-08_saveas-selected-mails-with-timestamp-outlook-vba.html
- 国本温子・緑川吉行&できるシリーズ編集部「できる逆引きExcel VBAを極める勝ちワザ700、Excel2016/2013/2010/2007対応」, インプレス, 2016年6月21日.