こんにちは、なかぜんです。
「Accessの帳票をPDFにして保存したいけど、毎回手作業でやってる……」という方、多いのではないでしょうか?
実は、VBAを使えばボタン一つでPDF出力&自動保存が可能なんです。この記事では、Access上級者の皆さんに向けて、実務で役立つ帳票PDF化+自動保存処理の具体的な実装方法を詳しく解説します!
帳票PDF化の基本:DoCmd.OutputToの使い方
AccessでレポートをPDF出力する基本コード
DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, "C:\Reports\納品書_20240601.pdf"
この1行で、レポート「R_納品書」をPDF形式で C:\Reports\
フォルダに保存できます。acOutputReport
は「レポート出力」、acFormatPDF
はPDF形式の指定です。
ファイル名を日付で自動生成する例
Dim fileName As String
fileName = "C:\Reports\納品書_" & Format(Date, "yyyymmdd") & ".pdf"
DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, fileName
Format(Date, "yyyymmdd")
で日付付きのファイル名を作成しておけば、毎日違うファイルとして保存できます。
PDF保存+ファイル存在チェック付きのVBA例
実用的な保存マクロの全体コード
Sub ExportReportToPDF()
Dim rptName As String
Dim folderPath As String
Dim fileName As String
rptName = "R_納品書"
folderPath = "C:\Reports\"
fileName = folderPath & rptName & "_" & Format(Date, "yyyymmdd") & ".pdf"
' フォルダ存在チェック
If Dir(folderPath, vbDirectory) = "" Then
MkDir folderPath
End If
' 既存ファイルがあれば削除
If Dir(fileName) <> "" Then
Kill fileName
End If
' PDF出力
DoCmd.OutputTo acOutputReport, rptName, acFormatPDF, fileName
MsgBox "PDF保存が完了しました:" & vbCrLf & fileName, vbInformation
End Sub
このコードでは、保存フォルダがなければ自動で作成し、同名ファイルがあれば削除してから保存します。日々の業務でも使える実用的な構成です。
ボタンクリックで実行!フォーム連携のポイント
フォームにコマンドボタンを配置し、上記のマクロを呼び出すように設定すれば、ワンクリックでPDF出力ができます。
Private Sub cmdPDF出力_Click()
Call ExportReportToPDF
End Sub
フォーム上のボタン名は cmdPDF出力
にしていますが、任意の名前でOKです。Call
でVBAマクロを呼び出すだけです。
【注意】よくあるミスと対処法
- ファイルパスに日本語を含めない: 一部の環境で文字化けや保存失敗になる場合があります。
- フォルダの書き込み権限: 保存先フォルダに書き込みできないとエラーになります。
- レポートが開いていると出力失敗: 出力対象レポートが編集中だとエラーになるので注意。
応用ポイント:レコードごとのPDF保存(ループ処理)
納品先ごとに1ファイルずつPDFを保存する方法
Sub ExportEachCustomerPDF()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim customerID As String
Dim fileName As String
Set db = CurrentDb()
Set rs = db.OpenRecordset("SELECT DISTINCT 納品先CD FROM T_受注", dbOpenSnapshot)
Do While Not rs.EOF
customerID = rs!納品先CD
fileName = "C:\Reports\納品書_" & customerID & "_" & Format(Date, "yyyymmdd") & ".pdf"
DoCmd.OpenReport "R_納品書", acViewPreview, , "納品先CD = '" & customerID & "'"
DoCmd.OutputTo acOutputReport, "R_納品書", acFormatPDF, fileName
DoCmd.Close acReport, "R_納品書", acSaveNo
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Set db = Nothing
MsgBox "すべてのPDFを保存しました。", vbInformation
End Sub
このコードは「納品先CD」ごとにレポートを出力し、個別のPDFとして保存していきます。大量の得意先に帳票を配布するケースで非常に便利です。
まとめ:AccessのPDF出力は業務効率化の第一歩
Accessの帳票をPDFとして保存する処理は、手作業を減らし、ミスを防ぐ非常に有効な自動化手段です。今回ご紹介したVBAコードを活用すれば、
- 毎日の帳票を自動でPDF保存
- レコード単位の出力にも対応
- フォームボタンからワンクリック実行
といった処理が可能になります。
次のステップへ
今回の内容をマスターしたら、次はメール添付自動化や、ファイル共有フォルダとの連携にも挑戦してみてくださいね。
AccessのVBAでできることは無限大。引き続き、なかぜんと一緒に業務をラクにする技を磨いていきましょう!
最後までお読みいただき、ありがとうございました。
