こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

access 複数レポート印刷

access2003を使用しています。

フォームから印刷するデータの条件をあたえ、ボタンを一回押下することで複数のレポートを印刷するようにしたいのですが、、、

現状では、一枚目のレポートを全部印刷したあと、二枚目のレポートを全部印刷、次に三枚目となってしまいます。
やりたいことは、1レコード目のデータのレポートを全部印刷したあと2レコード目のデータのレポートを印刷、次に3レコード目のデータ、、、という風に行いたいと思っています。

1レコードずつ抽出してforループさせればいいと思っていますが、具体的にどういうコードを書けばいいかわかりません。

どうすればよいでしょうか?

投稿日時 - 2008-09-16 09:30:27

QNo.4332473

すぐに回答ほしいです

質問者が選んだベストアンサー

No.2ですが、質問をよく読んでなかったのでとんちんかんな回答になってしまいました。

1レコードずつ選択したいとのことですが、そのレポートを印刷するときに
DoCmd.OpenReport "レポート名"
などと書いているかと思いますが、その際に
DoCmd.OpenReport "レポート名", , , "社員NO=10"
と書くと社員NO.10のデータだけ印刷出来ます。

このように条件を指定することで印刷が出来るわけですが、
印刷したいデータをどうやって取得するかはレコードセットなどの
知識が必要になると思います。
レコードセットがわかるようなら、レコードセットをDoループなどでまわして社員NOのところにセットすればよいでしょう。

投稿日時 - 2008-09-16 11:33:08

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(5)

× 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 を抜いていました。
チト、バグです。

投稿日時 - 2008-09-16 11:02:43

ルーチンのみ・・・。

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かと思います。
レポートのレコードセットをこのようにセットすれば良い訳ですから・・・。

投稿日時 - 2008-09-16 10:51:09

ANo.2

一つのレポートに3種類の帳票を作る

1レコードずつレポートを開いて順番に印刷する
のどちらかでしょうね。


単票のようなので1レポートに3種類のページを作るのは不可能ではないかと思います。
フッター・ヘッダーや「改ページ」などをうまく使ってみてください。

投稿日時 - 2008-09-16 10:26:25

ANo.1

質問している意図が、判りかねますが・・・

レポートのレコードソース次第じゃないでしょうか?
フォームからの条件で、1レコードしか無い条件だったのか?
複数レコード選択される条件だったのか?

OpenReportにて、whereconditionを変化させながら、For文で回しても可でしょうけどね

もう少し具体的に話が出てこないと、なんとも・・・

投稿日時 - 2008-09-16 09:57:48

あなたにオススメの質問