こんにちは、くのへ@MasazaneKunoheです。
Outlook VBAでメールをPDF化する方法を3種ほど確認しました。
Outlook VBAにはExportAsFixedFormatメソッドが無い(*)ので、PDF化は意外と難しい感じでした。 (*) ExcelやWord VBAにはあるのに、、、
今回は「その3」として、PrintOutメソッドを使う方法を紹介します。
その3 PrintOutメソッドを使う方法
コード
Outlook VBEに次のコードをコピペで動くと思います。
ただし、最後の”いつものプリンタ”のところは自分がいつも使っているプリンタ名にして下さい。
Sub PDF化_PrintOutメソッド版()
Dim objItem As Object
Set objItem = ActiveExplorer.Selection(1)
Dim WSHnet As Object
Set WSHnet = CreateObject("WScript.Network")
WSHnet.SetDefaultPrinter "Microsoft Print to PDF"
objItem.PrintOut
WSHnet.SetDefaultPrinter "いつものプリンタ"
End Sub
ポイント解説
このコードのポイントはWScript.Networkの力を借りて、デフォルトのプリンタをMicrosoft Print to PDFに切り替えてPrintOutメソッドを使い印刷し、そしてまたいつものプリンタに戻しているところです。
なんとなくコードを見れば分かりますね。
PrintOutメソッドのところでダイヤログが開き、保存先およびPDFファイル名が聞かれますので、それに入力すると任意のフォルダ・ファイル名で保存できます。
ちなみに出来上がりはこんな感じです。
PrintOutメソッドについて
OutlookのPrintOutメソッドの書式は次のようになります。
これで「規定」のプリンタで印刷できます。
アイテム.PrintOut
そのため、WSHのお力を借りて、既定のプリンタをMicrosoft Print to PDFに設定すればPDF化することができる、という仕組みです。
(余談)ExcelやWordだったら
ExcelでPrintOutメソッドを使っている方はご注意頂きたいのですが、ExcelのPrintOutメソッドだと、引数で使うプリンタを指定できます。
ExcelのPrintOutメソッドはこちら(ActivePrinterのところで指定できる)
でもOutlookではできないんです。。。
さらに、Word VBAを使える方は、WSHなど使わずに、Application.ActivePrinterプロパティでプリンタ設定を変えられるので、ActivePrinterで良くね?と思うかもです。
WordのActivePrinterメソッドはこちら
でもOutlookにActivePrinterプロパティが無いんです。。。
ということでOutlookで印刷機能を使ってPDF化しようと思ったら、WSHを使ってプリンタを切り替えるあたりで実装するしかないかな~と思います。
ではまた別の記事で~
🦅バサバサ~
その1はこちら(Word VBAのお力を借りる方法)
その2はこちら(Inspector.WordEditerを使う方法)