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

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の操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

サービス一覧

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