- ベストアンサー
Accessで複数のレポートを印刷する方法
- Access2003を使用している場合、フォームから印刷するデータの条件を指定し、一度のボタン操作で複数のレポートを印刷する方法について教えてください。
- 現在は、一枚目のレポートをすべて印刷した後に、二枚目のレポートをすべて印刷し、それから三枚目というようになっています。しかし、1レコードごとにレポートを印刷したいという要件です。
- 1レコードずつ抽出してforループを使用して印刷する方法を教えてください。具体的なコードの記述方法を教えていただけると助かります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
No.2ですが、質問をよく読んでなかったのでとんちんかんな回答になってしまいました。 1レコードずつ選択したいとのことですが、そのレポートを印刷するときに DoCmd.OpenReport "レポート名" などと書いているかと思いますが、その際に DoCmd.OpenReport "レポート名", , , "社員NO=10" と書くと社員NO.10のデータだけ印刷出来ます。 このように条件を指定することで印刷が出来るわけですが、 印刷したいデータをどうやって取得するかはレコードセットなどの 知識が必要になると思います。 レコードセットがわかるようなら、レコードセットをDoループなどでまわして社員NOのところにセットすればよいでしょう。
その他の回答 (4)
× Const ID取得文 = "SELECT ID FROM tab1 WHERE ID>%% ORDER BY ID" ○ Const ID取得文 = "SELECT Top 1 ID FROM tab1 WHERE ID>%% ORDER BY ID" もしくは、DLookup関数の類。 で、DLookup関数の類を使う予定で Top1 を抜いていました。 チト、バグです。
ルーチンのみ・・・。 tab1: ID_fld1 1__A 2__B 3__C [イミディエイト] SELECT Top 1 * FROM tab1 WHERE ID> 0 ORDER BY ID 1;A; SELECT Top 1 * FROM tab1 WHERE ID> 1 ORDER BY ID 2;B; SELECT Top 1 * FROM tab1 WHERE ID> 2 ORDER BY ID 3;C; Option Compare Database Option Explicit Const ID取得文 = "SELECT ID FROM tab1 WHERE ID>%% ORDER BY ID" Const RC取得文 = "SELECT Top 1 * FROM tab1 WHERE ID>%% ORDER BY ID" Private Sub コマンド0_Click() Dim I As Integer Dim N As Integer Dim ID As Long Dim strSQL(1) As String N = DBCount("*", "tab1") ID = 0 For I = 1 To N strSQL(0) = Replace(ID取得文, "%%", str(ID)) strSQL(1) = Replace(RC取得文, "%%", str(ID)) Debug.Print strSQL(1) Debug.Print DBSelect(strSQL(1)) ID = CutStr(DBSelect(strSQL(0)), ";", 1) Next I End Sub DBCount関数、DBSelect関数等の詳細は、余り関係ありませんので割愛します。 要は、1レコードづつ順番に取得できている点です。 仕掛けとしては、これでOKかと思います。 レポートのレコードセットをこのようにセットすれば良い訳ですから・・・。
- Pakkun10
- ベストアンサー率44% (22/50)
一つのレポートに3種類の帳票を作る か 1レコードずつレポートを開いて順番に印刷する のどちらかでしょうね。 単票のようなので1レポートに3種類のページを作るのは不可能ではないかと思います。 フッター・ヘッダーや「改ページ」などをうまく使ってみてください。
- Dxak
- ベストアンサー率34% (510/1465)
質問している意図が、判りかねますが・・・ レポートのレコードソース次第じゃないでしょうか? フォームからの条件で、1レコードしか無い条件だったのか? 複数レコード選択される条件だったのか? OpenReportにて、whereconditionを変化させながら、For文で回しても可でしょうけどね もう少し具体的に話が出てこないと、なんとも・・・