こんにちは、くのへ@MasazaneKunoheです。
Outlook VBAでメールをPDF化する方法を3種ほど確認しました。
Outlook VBAにはExportAsFixedFormatメソッドが無い(*)ので、PDF化は意外と難しい感じでした。 (*) ExcelやWord VBAにはあるのに、、、
今回は「その2」として、WordEditorプロパティを使う方法を紹介します。
その2 WordEditorを使う方法
コード
Outlook VBEに次のコードをコピペで動くと思います。
ただし、初めのConst DESKTOP、、、のところのアドレスは自分が保存したいアドレスにしてください。
Sub PDF化_WordEditor版()
'保存先フォルダのアドレスを記載。最後に\マークを加筆すること
Const DESKTOP As String = "C:\Users\ユーザ名\Desktop\"
'Outlook画面の選択中のアイテムをobjItemとしてセット
Dim objItem As Object
Set objItem = ActiveExplorer.Selection(1)
'メールヘッダを記述するため、元のメールを「転送」して
'Bodyにメールヘッダ情報が記述されたobjFWを作成する
Dim objFW As Object
Set objFW = objItem.Forward
'WordEditorはInspector(:アイテムウィンドウ)に対して使えるメソッドのため、
'Displayメソッドを使ってInspectorを開かせる。
'そしてWordEditorプロパティおよびExportAsFixedFormatメソッドを使いPDF化する
'最後に「保存せずに閉じる」のため、closeメソッド(引数にolDiscard)を使う
objFW.Display
ActiveInspector.WordEditor.ExportAsFixedFormat DESKTOP & objItem.Subject & ".pdf", 17
objFW.Close olDiscard
End Sub
ポイント解説
このコードのポイントはWordEditorプロパティを使っているところです。
WordEditorプロパティは、Inspectorオブジェクトを上位とし、メッセージの Word ドキュメント オブジェクト モデルを取得するプロパティです。(Microsoft公式Docs)
↑この説明は非常に難解だと思います。
これはつまり、「WordEditorオブジェクトを起点としてWordVBAのメソッドやプロパティを使える」ということなのです。(書式は下記の通り)
Inspectorオブジェクト.WordEditor.WordVBAのメソッド/プロパティ
ということは、前回記事の「PDF化その1」で使用したExportAsFixedFormaメソッドが使える、ということです。
ExportAsFixedFormatメソッドの書式は次の通りです。17がPDF形式を表しています。
ファイルオブジェクト.ExportAsFixedFormat 保存先アドレス+ファイル名, 17
今回の方法もWordVBAのお力を借りてPDF化しているんですね!
コードの詳細解説
まず次のコードで説明いたします。
Sub PDF化_WordEditor版_メールヘッダ無し版()
Const DESKTOP As String = "C:\Users\masaz\Desktop\"
Dim objItem As Object
Set objItem = ActiveExplorer.Selection(1)
objItem.Display
ActiveInspector.WordEditor.ExportAsFixedFormat DESKTOP & objItem.Subject & ".pdf", 17
objItem.Close olDiscard
End Sub
次の2行でOutlookにて選択中のメールアイテムをobjItemとしてセットしています
Dim objItem As Object
Set objItem = ActiveExplorer.Selection(1)
さらに次のコードで、メールを新しいウィンドウで開いています。
objItem.Display
わざわざ新しいウィンドウで開いているのは、WordEditorプロパティはInspector(メールウィンドウ)に対してのみ使用できるプロパティだからです。わざわざ新しいウィンドウを開いてActiveInspectorを使えるようにしているのです。
後は次のコードでPDF化処理を行い、メールウィンドウを閉じています。
ActiveInspector.WordEditor.ExportAsFixedFormat DESKTOP & objItem.Subject & ".pdf", 17
objItem.Close olDiscard
ちなみにメールウィンドウを閉じる「Close」メソッドは引数を書かなければエラーになります。
引数はこちらの通りです。(出典:Microsoft公式Docs)
名前 | 値 | 説明 |
olSave | 0 | ドキュメントを保存。 |
olDiscard | 1 | ドキュメントに対する変更内容を破棄。 |
olPromptForSave | 2 | 保存するかどうかをユーザーに確認。 |
これを実行してみる
「まずこのコードで解説します」と書いたコードを実行すると、こんな内容のPDFができます。
悪くはないのですが、件名、TO宛先、受信日時などの「メールヘッダ情報」が含まれていません。
WordEditorを使うと、メール本文に記載された情報だけがPDF化されます。
しかし、メールヘッダ情報も含めてPDF化したいというのが普通です。
そこで、WordEditorを使う場合には次のコードのマーキング部の工夫をします。
Sub PDF化_WordEditor版()
Const DESKTOP As String = "C:\Users\ユーザ名\Desktop\"
Dim objItem As Object
Set objItem = ActiveExplorer.Selection(1)
Dim objFW As Object
Set objFW = objItem.Forward
objFW.Display
ActiveInspector.WordEditor.ExportAsFixedFormat DESKTOP & objItem.Subject & ".pdf", 17
objFW.Close olDiscard
End Sub
このように、元のメールの「転送アイテム」をPDF化するのです。
すると、このように作成されます。
おぉ!!ヘッダ情報が書かれてる!!
ということで、これでメールのPDF化が完成です。
解説は以上です。
また別の記事で~
🦅バサバサ~