040 メールをPDF化する方法 その2(Word Editorプロパティ)

こんにちは、くのへ@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

名前説明
olSave0ドキュメントを保存。
olDiscard1ドキュメントに対する変更内容を破棄。
olPromptForSave2保存するかどうかをユーザーに確認。

これを実行してみる

「まずこのコードで解説します」と書いたコードを実行すると、こんな内容の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化が完成です。

解説は以上です。


また別の記事で~
🦅バサバサ~

その1はこちら(Word VBAのお力を借りる方法)
その3はこちら(PrintOutメソッドを使う方法)

くのへスタジオはこちら。
Outlook-VBAコーナーはこちら。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です