メッセージで以下のようなご質問をいただきました。
弊社では、あるシステムから定期的に Excel ファイルを添付したメッセージが送信されてきます。このメッセージの添付ファイルを毎回開くのが手間なのですが、受信時に本文へ Excel のデータを自動的に埋め込むことはできないでしょうか?
Excel には HTML 形式で保存する機能がありますので、受信時に添付された Excel ファイルを HTML 形式で保存し、その HTML データを本文に追記することでご要望の動作が可能となるでしょう。
マクロは以下の通りです。
' ここをトリプルクリックでマクロ全体を選択できます。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
ImportExcelSheet EntryIDCollection
End Sub
'
Sub ImportExcelSheet(EntryIDCollection)
Const REPORT_SUBJECT = "Daily Report *" ' マクロを実行する必要があるメッセージの件名を指定します。
Dim objItem 'As MailItem
Set objItem = Session.GetItemFromID(EntryIDCollection)
' 通常のメッセージでなければ無視
If objItem.MessageClass <> "IPM.Note" Then
Exit Sub
End If
' 条件に合致するかどうかと添付ファイルがあるかのチェック
If objItem.Subject Like REPORT_SUBJECT And _
objItem.Attachments.Count = 1 Then
Dim objAttach As Attachment
Set objAttach = objItem.Attachments(1)
' 添付ファイルが Excel かどうかのチェック
If objAttach.FileName Like "*.xls" Or objAttach.FileName Like "*.xls?" Then
Dim objFSO 'As FileSystemObject
Dim objShell 'As WshShell
Dim strFileName As String
Dim objWookbook 'As excel.Workbook
Dim stmCss 'As TextStream
Dim stmHtml 'As TextStream
' 一時フォルダに格納するためのファイル名を作成
Set objShell = CreateObject("WScript.Shell")
strFileName = objShell.ExpandEnvironmentStrings("%temp%\" & objAttach.FileName)
Set objShell = Nothing
' 同名のファイルがすでに存在する場合は削除
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strFileName) Then
objFSO.DeleteFile strFileName, True
End If
If objFSO.FileExists(strFileName & ".htm") Then
objFSO.DeleteFile strFileName & ".htm", True
End If
' 添付ファイルを保存
objAttach.SaveAsFile strFileName
Set objAttach = Nothing
' 保存したファイルを開く
Set objWookbook = GetObject(strFileName)
' 最初のワークシートを HTML 形式で保存
objWookbook.Worksheets(1).SaveAs strFileName & ".htm", 44 ' 44 = xlHtml
objWookbook.Close
Set objWorkbook = Nothing
' CSS と HTML ファイルを読み込み
Set stmCss = objFSO.OpenTextFile(strFileName & ".files\stylesheet.css")
Set stmHtml = objFSO.OpenTextFile(strFileName & ".files\sheet001.htm")
' HTML 本文の最後に HTML として保存した Excel ファイルを追加
objItem.HTMLBody = objItem.HTMLBody & Replace(stmHtml.ReadAll, _
"<link rel=Stylesheet href=stylesheet.css>", _
"<style>" & vbCrLf & stmCss.ReadAll & vbCrLf & "</style>" & vbCrLf)
objItem.Save
Set objItem = Nothing
stmCss.Close
stmHtml.Close
Set stmCss = Nothing
Set stmHtml = Nothing
Set objFSO = Nothing
End If
End If
End Sub
はじめまして。いつも参考にさせて頂いております。
この投稿に関連して、質問させて頂きます。
メール作成時に、Excelファイルを添付した際に、本文に自動的に添付したExcelファイルの内容を埋め込みたいのですが、可能なのでしょうか。
ファイルを添付した際に発生するイベントもあるのですが、VBA でこのイベントを処理するのはちょっと難しいです。
アドインでの実装になるので、ブログで掲載するにはちょっとヘビーな内容となってしまいます。
恐れ入ります。急に仕事でアウトルック2016からメール本文のデータをエクセル2016に取り出して欲しいと言われました。エクセルからエクセルへ移すと聞いていたのですが、メールで使用している元の雛形がエクセルとのことでした。添付ファイルではなく、メール本文にカラフルな表?フォームの形で使われていました。こちらのサイトを参考にエクセル側からメール本文を取り出すことが出来たのですが、内容にチェックボックスのデータがあり、どう取得するのかわかりません。表の他の部分は1つのセルに取り出せています。一度簡単に見せられただけなので、上手く説明出来なくてすみません。どうか、よろしくお願い致します。
申し訳ありませんが、実際のメールの本文がどのような状態になっているかがわからないと、マクロで対応可能かどうかが判断できません。