仮想プリンタを使わなくてもPDF出力できます
PDF化と言うと仮想プリンタを使って印刷処理でPDF化する方法が有名ですが
現代のエクセルやワードはファイルの保存で普通にPDFファイルを保存することが可能です
昔ながらの仮想プリンタでPDF出力する画面
現代では普通にPDF保存できるようになってる
Office2012あたりからできるようになった
というわけでVBAでPDFファイル出力するときもExportAsFixedFormatというコマンドで簡単に出力可能になってます
エクセルファイルのPDF出力
エクセルのPDF保存の場合、いろいろ省略するとこんな感じになる
'ワークブック Dim workbookObj As Workbook '開く Set workbookObj = Workbooks.Open(fileName:=excelFilePath, UpdateLinks:=0, ReadOnly:=True, IgnoreReadOnlyRecommended:=True) 'PDF出力 Call workbookObj.ExportAsFixedFormat(xlTypePDF, pdfFilePath) 'ブックを閉じる Call workbookObj.Close
上記のような単純なWorkbooks.Openの場合、他人や自分が開いてるエクセルファイルを開こうとしていろいろ不都合が発生したりする。そのため下で紹介してるサンプルコードでは「Dim excelApp As New Excel.Application」を使ってプロセスを新しく作成してPDF化するファイルはそっちで開くようにしている。エクセル開く系の処理はこれを頻繁に使うと思うので覚えておいて損はない
ワードファイルのPDF出力
ワードのPDF保存の場合、いろいろ省略するとこんな感じになる
'必要な参照設定 'Microsoft Word 16.0 Object Library 'wordの新規プロセス Dim wordApp As New Word.Application 'wordドキュメントオブジェクト Dim wordDoc As Word.Document wordApp.Visible = True 'ドキュメント開く Set wordDoc = wordApp.Documents.Open(wordFilePath, ReadOnly:=True) 'PDF出力 Call wordDoc.ExportAsFixedFormat(pdfFilePath, wdExportFormatPDF) 'プロセス開放 Call wordDoc.Close Call wordApp.Quit
エクセルでワードファイル開くときは「Microsoft Word 16.0 Object Library」の参照設定が必要になるので注意しよう。サンプルコードでは参照設定なしでも動くコードもついでに書いておいたけど参照設定ある版のほうが色々楽だと思う
エクセルでもワードでもPDF出力に使うのはExportAsFixedFormatという処理だけど渡す引数や引数の並びは全然違うので注意しよう、てかなんで共通じゃないんだこれ