ACCESS VBAでレポートをPDFに出力する方法

ACCEESSで作成したレポートは印刷以外にPDFで保存するという利用方法も一般的です。
通常は印刷プレビューで開いてからPDF保存しますが、VBAを使ってレポートを表示させずにPDF保存することも可能です。
今回は、VBAでレポートをPDFに出力する方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは基本機能だけでも十分便利ですが、VBAを使うことで格段に使いやすいデータベースを作成可能です。
この記事ではACCESSでのVBAの使い方をご紹介していきます。
DoCmd.OutputToメソッド
ACCESSのオブジェクトをPDFに保存する際に利用するのが、DoCmd.OutputToメソッドです。
以下の構文で利用します。
DoCmd.OutputTo 出力するACCESSオブジェクトの種類 , オブジェクト名 , 出力するファイル形式 , 出力先ファイルパス
他にも引数はありますが、基本はこれだけ覚えておけば十分でしょう。
一つ目の引数である出力するACCESSオブジェクトの種類は以下のパラメータがあります。
acOutputTable | テーブル |
acOutputQuery | クエリ |
acOutputForm | フォーム |
acOutputReport | レポート |
acOutputFunction | ユーザー定義プロシージャ |
acOutputModule | モジュール |
ほかにもありますが、実際に利用するのは上記くらいでしょう。今回はレポートのPDF出力ですので、acOutputReportを使用します。
また、3つ目の引数である出力するファイル形式は、acFormatの後ろにファイル形式を記述する形になります。
PDF出力の場合は、acFormatPDFと記述します。
完成系
では、DoCmd.OutputToを使ったレポートのPDF保存の完成系を示します。
下記は請求書の発行画面です。

右下に「PDF保存」のボタンを作ってあります。このボタンを押すと、ACCESSファイルがあるディレクトリに、指定したレコードの請求書をPDFで出力します。
イベントプロシージャの設定
では、作り方です。
まずは上記のフォームをデザインビューで表示します。

デザインビューで表示すると、PDF保存ボタンのクリック時イベントにイベントプロシージャを設定してあります。

このイベントプロシージャにVBAでDoCmd.OutputToを使ったPDF出力機能を設定してあります。
VBAプログラミング
では、VBAのコードを見てみましょう。
フォームのPDF保存ボタンのクリック時イベントに下記のイベントプロシージャを設定してあります。
Private Sub PDF保存_ボタン_Click()
DoCmd.OutputTo acOutputReport, "請求書", acFormatPDF, Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\")) & "請求書" & Me!請求ID & ".pdf"
End Sub
一行だけの単純なコードで、DoCmd.OutputToメソッドを使って、PDFに出力します。
一つ目の引数に「acOutputReport」を設定することで、ACCESS内にあるレポートを出力することを指定しています。
二つ目の引数は”請求書”にしていますが、これはACCESS内に「請求書」という名前のレポートを事前に作っており、それを出力するということです。
三つ目の引数が「acFormatPDF」でPDFで出力する指定をしていますね。
四つ目の引数は少し複雑ですが、出力するファイルパスを設定しています。
Left(CurrentDb.Name, InStrRev(CurrentDb.Name, "\"))
は現在のACCESSファイルがあるディレクトリ名をテキストとして取得しています。
CurrentDb.Nameは現在のACCESSファイルがあるファイルパスを取得することができます。ここから、ファイル名を削除して新たに保存するPDFファイルのファイル名を最後に付与しているのです。
InStrREv関数は文字列の中から指定した文字列を最後から検索し、最初に見つかった文字位置を返します。
ここで探している文字は「\」です。
CurrentDb.Nameでファイルパスを取得した際に、一番最後の「\」はファイル名の前にあります。
そのため、Left関数で「\」の前までにCurrentDb.Nameのテキストを短縮することで、ファイル名を除いたファイルパスに変換しているのです。
以上、VBAでレポートをPDFに出力する方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。