MS Access Tips/Sample and VBA and Blog customize etc...

レポートをグループ毎に分割してPDFファイルとして保存したい

最近、よく見かける質問です。

レポートのPDF化は、Access2007から、OutputToメソッドの出力形式の引数でPDFを指定できるようになったので実に簡単です。

ただ、出力するときに抽出条件を設定できないので、全レコードが一つのファイルとして出力されます。

これを、顧客などのグループごとに分割してPDF化する方法です。2007以降が対象です。

PDFファイル分割出力タイトル

難易度:

サンプル仕様

レポート R_請求書

レコードソース Q_請求
 フィールド構成 請求番号、得意先コード、得意先名、請求日・・・
 WHERE句はないものとする。

今月分の請求書を顧客別に、PDFファイルで出力。
出力先フォルダー C:\PDFOutput
ファイル名書式 yyyymm_顧客コード.pdf

フォーム上の コマンド0 をクリックで上記の仕様で出力。

VBAコード

レポートのレコードソースから得意先コードを重複を排除してレコードセットとして開き、その得意先コードで抽出したレポートをプレビューしてから、OutputTo でPDF出力して、レポートを閉じる、をレコード移動しながら繰り返します。

得意先マスターがあるならそれで得意先を取り出してもいいでしょう。

静かに実行

上記のコードだと、得意先の件数分、プレビューが開きます。動きがわかってよろしいという場合はいいですが、鬱陶しい、少しでも高速化したいという場合は、プレビューを開かずに出力できるといいですね。

レコードソースのクエリのSQLにWHERE句(抽出条件)を追加してからOutputToします。
最後に クエリのSQLを元に戻しておきます。

注意点

PDF出力時にキャンセルしたり、エラーが出るとクエリのSQLが書き変わったままになるので、エラー処理コードを追加してSQLを必ず書き戻すようにしてください。

抽出対象のフィールドがテキスト型の場合は値を '(引用符)で囲んでください。

拍手する

3 Comments

ryoza0130 says..."YAHOO知恵袋でも回答いただきましたが…"

上記でも回答いただきましたが中々うまくいかずこちらにたどり着きました。

上段のコードでいくつかわからない部分があるのでご教示ください。
まず、
Set rs = db.OpenRecordset("SELECT DISTINCT 得意先コード FROM Q_請求", dbOpenForwardOnly, dbReadOnly)
で、私の場合はクエリにユニオンクエリをおいたのですが、そうすると「実行時エラー '3131' FROM句の構文エラーです。」と出てしまいました。
ここはselectの書き方を変えなくてはいけないのでしょうか。

とりあえず上記のエラーを避けるため重複を削除した【得意先コードT】を仮に作りコードに当てはめて進んでみたのですが、次にDocmd.OpenReportの「 "得意先コード=" & rs!得意先コード,」の部分がよくわかりませんでした。
WhereConditionなのでレポートの得意先コードと【得意先コードT】が一致するものを抽出しているのだと思うのですが、実行するとパラメータの入力で得意先コードの入力を求められてしまします。
ここでパラメータの入力に表示されているコードを手入力すると正しくPDF出力されるのですが、なぜこのようになってしまうのでしょうか。

度々の質問で大変申し訳ないのですがどうぞよろしくお願いいたします。

2013.09.13 16:38 | URL | #USufH/tE [edit]
ryoza0130 says...""

度々申し訳ありません。
追記です。

重複の削除の部分でユニオンクエリを元に新たにクエリを作成し試してみたところ、「実行時エラー3061 パラメーターが少なすぎます。3を指定してください。」となってしましました。

また、知恵袋で回答いただいた際に、ユニオンクエリのパラメーターをテキストボックスから参照するようにとのことでしたので、[支払日は? ※2013年4月1日なら20130401と入力]

Forms!フォーム名!テキストボックス名
上記のように変更してみたのですが、パラメータの入力ダイアログで文言が「Forms!フォーム名!テキストボックス名」に変わっただけでした。
入力規則に沿っていないからでしょうか。

2013.09.13 17:07 | URL | #USufH/tE [edit]
hatena says..."掲示板へ移動しましょう"

ちょっと込み入っているようなので、
下記の掲示板で質問しなおしてください。

http://hatena-access.progoo.com/bbs/ hatena の Microsoft Access 掲示板

その際に、下記の情報を提示してください。

現状のレポートのレコードソースのクエリのSQL分。

現状の記述しているVBAコード。

2013.09.14 01:57 | URL | #5uE6dEgY [edit]

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/380-14f7867e
該当の記事は見つかりませんでした。