039 メールをPDF化する方法 その1(Word VBAのお力を借りる方法)

R1 コードを修正しました。(Re:のように「:」が含まれているファイルも処理できるコードにしました)

こんにちは、くのへ@MasazaneKunoheです。
Outlook VBAでメールをPDF化する方法を3種ほど確認しました。

Outlook VBAにはExportAsFixedFormatメソッドが無いので、PDF化は意外と難しい感じでした。
今回は「その1」として、日本・海外のWebサイト上で一番メジャーだったWord VBAのお力をお借りするコードを紹介します。

その1 WordVBAのお力をお借りする方法

コード

Outlook VBEに次のコードをコピペで動くと思います。
ただし、初めのConst DESKTOP、、、のところのアドレスを自分が保存したいアドレスにしてください。(アドレスの最後に¥マークを忘れずに!!)

Sub PDF化_WordVBA呼出し版()

'保存先と一時ファイルの設定。保存先アドレスの最後に\を付けること。
Const DESKTOP As String = "C:\Users\ユーザ名\Desktop\"
Const TEMP As String = "temp.RTF"
    
'選択しているメールをRTFファイルとして一時保存
  Dim objItem As Object
  Set objItem = ActiveExplorer.Selection(1)

  objItem.SaveAs DESKTOP & TEMP, olRTF

'保存したRTFファイルをWordで開く
  Dim appWord As Object
  Set appWord = CreateObject("Word.Application")
  
  Dim objRTF As Object
  Set objRTF = appWord.Documents.Open(DESKTOP & TEMP)

'WordVBAでPDFとして保存(PDFフォーマットのコード番号は「17」)
  objRTF.ExportAsFixedFormat DESKTOP & ファイル禁止文字処理(objItem.Subject) & ".pdf", 17
  objRTF.Close
  Set objRTF = Nothing

'一時保存したRTFファイルを削除
  Kill DESKTOP & TEMP

'Wordを終了
  appWord.Quit

End Sub




Function ファイル禁止文字処理(ByVal strFileName As String) As String

'それぞれ全角文字に置き換える
    strFileName = Replace(strFileName, "\", "¥")
    strFileName = Replace(strFileName, "/", "/")
    strFileName = Replace(strFileName, ":", ":")
    strFileName = Replace(strFileName, "*", "*")
    strFileName = Replace(strFileName, "?", "?")
    strFileName = Replace(strFileName, "<", "<")
    strFileName = Replace(strFileName, ">", ">")
    strFileName = Replace(strFileName, "|", "|")
    strFileName = Replace(strFileName, "[", "[")
    strFileName = Replace(strFileName, "]", "]")

'ダブルクオーテーション処理(VBAではダブルクオーテーションを書けないのでChrを使う)
    strFileName = Replace(strFileName, Chr(34), Chr(&HFA57))

    ファイル禁止文字処理 = strFileName
End Function

このコードは、まず保存先をConst(定数)で設定させています。

次にSaveAsメソッドでRTF形式で保存しています。

SaveAsメソッドは次のように第2引数を書くとmsgファイル以外のデータ形式で保存できます。

アイテムオブジェクト.SaveAs 保存先アドレス+ファイル名[, 保存形式]

[]は省略可の意。省略した場合はmsgファイルとして保存される

保存形式にolRTFと書くとRTF形式で保存できます。ちなみにRTF形式というのはリッチテキストフォーマットの略で、Microsoftが作ったフォーマットだそうです。

RTF形式でメールを一時保存したら、次はWordのお力をお借りします。
Word.ApplicationをappWordオブジェクトにセットし、Word VBAのExportAsFixedFormatメソッドを使います。

↓このようにコーディングすると、appWordオブジェクトを起点としてWord VBAを使えるようになります(エクセルでOutlook VBAを操作するときと同じような感じです)

  Dim appWord As Object
  Set appWord = CreateObject("Word.Application")

このappWordオブジェクトを起点に、Documents.OpenメソッドでRTFファイルを開き、さらにExportAsFixedFormatメソッドでPDFに変換しているのです。

ExportAsFixedFormatメソッド は次の書式です。第2引数の17はPDFを指しています。

ファイルオブジェクト.ExportAsFixedFormat 保存先アドレス+ファイル名, 17

ちなみに、第2引数が他に何があるか知りたい方はこちらを参照ください。

後はあと始末です。オブジェクトをNothingしたりします。

ここで、Killメソッドでファイルを削除しています。

Kill ファイルアドレス

また、次のコードでバックグラウンドで動いているWordを停止させます。

appWord.Quit 

このappWord.Quitのコードを書かないと、パソコンの内部ではWordが起動したままとなり、パソコンを再起動した時に停止処理しなかったWordが起動することがあります(=いわゆるWordがゾンビになった状態)。必ずQuitしましょう。

最後にFuncionがありますが、これはメールの件名に「ファイル禁止文字」が入っていた場合、禁止されていない文字に変換するためのものです。詳しくはこちらの記事を御参照ください。

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

その2はこちら(Inspector.WordEditerを使う方法)
その3はこちら(PrintOutメソッドを使う方法)

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

コメントを残す

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