- ベストアンサー
Access2000のレポートで条件付改ページの方法を教えて下さい。
Access2000で「所属コード」と「社員氏名」が入っているレポートを作りました。 枠線もつけてひととおりできたのですが、改ページの方法がよくわかりません。 以下の条件で改ページを行なうにはどうしたらよいのでしょうか? データは、所属コード毎にまとまっていて、さらに同じ所属コードのなかでは社員氏名(50音順)になっています。空白のデータ行はありません。 条件 1.1ページ10人で改ページをする。 2.所属コードが変わったら、10人に満たなくても改ページする。 3.所属コードが変わって改ページをする場合、空の行を補って1ページは常に10人分とする。 以上のような条件を満たす改ページ設定はできるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
なんかカッコ悪いコードになっちゃいましたが 勘弁してください。 DoCmd.RunSQL "DELETE W_印刷用.* FROM W_印刷用;" Dim CN As ADODB.Connection Dim RS As ADODB.Recordset Dim RS2 As ADODB.Recordset Dim 件数 As Integer Dim 空白数 As Integer Dim 退避所属コード As Long Dim 番号 As Long Set CN = CurrentProject.Connection Set RS = New ADODB.Recordset Set RS2 = New ADODB.Recordset RS.Open "T_社員", CN, adOpenKeyset, adLockOptimistic RS2.Open "W_印刷用", CN, adOpenKeyset, adLockOptimistic RS.MoveFirst 番号 = 1 件数 = 1 Do Until RS.EOF 退避所属コード = RS!所属コード Do Until 退避所属コード <> RS!所属コード RS2.AddNew RS2!番号 = 番号 RS2!社員名 = RS!社員名 RS2!所属コード = RS!所属コード RS2.Update RS.MoveNext If RS.EOF Then Exit Do 番号 = 番号 + 1 件数 = 件数 + 1 Loop If 件数 > 10 Then 件数 = (件数 Mod 10) End If 空白数 = 10 - 件数 番号 = 番号 + 1 For I = 1 To 空白数 RS2.AddNew RS2!番号 = 番号 RS2!所属コード = 退避所属コード RS2.Update 番号 = 番号 + 1 Next I 件数 = 1 Loop RS.Close RS2.Close CN.Close テーブル ・T_社員 社員名 テキスト型 所属コード 数値型(長整数) ・W_印刷用 番号 数値型(長整数) 社員名 テキスト型 所属コード 数値型(長整数) で作成しました。 もっと簡潔にできるとは思いますが そこはお願いします。 もちろんレポートでグループヘッダーを所属コードで 作成しておかないとこのままW_印刷用をそのまま印刷しても、別所属コードで改ページされません。 (1ページ10件ぎりぎりで作成しておけば別ですが)
その他の回答 (2)
- klub
- ベストアンサー率36% (14/38)
これはVBAを使用しないと解決できないかと思います。 幾つかの方法があって、まず1つはデータをまた別なテーブルへ移行し、同時に空白行を作成する方法。 例えば 元データテーブル 印刷時用一時テーブル 氏名 所属 → 氏名 所属 あーさん 1 あーさん 1 かーさん 1 かーさん 1 いーさん 2 空白行 1 きーさん 2 以下10行になるまで空白行 いーさん 2 きーさん 2 空白行 2 以下10行になるまで空白行 このような印刷時用の一時テーブルをVBAにて作成して それをレポートに使用します。 このとき1つの所属で10人以上いた場合は2ページ目に わたりますので、(1所属の件数 MOD 10)で 余りを算出し、余りが0以上ならその値を10から引けば 作成する空白行数が分かります。 2つ目は印刷時にレポートにVBAを使用して制御する方法です。 NextRecordプロパティの値を調べて次のレコードを印刷するかと判断します。 まだ方法があるとは思いますが、私は1つ目の方法でいつも制御しています。 VBAの参考本にこの類のサンプルプログラムがあるので 参考にしてみてはいかがでしょうか。 ではではがんばってください。
補足
早速の回答ありがとうございます。 回答文を読ませていただき、仕掛けについては「なるほど」と思ったのですが 実際のコードの記述については難しいみたいです。 そこで、もし差し支えがなければ、1つ目の方法について実際のコードを公開していただくことはできないでしょうか。 (撫しつけなお願いですいません)
- k_eba
- ベストアンサー率39% (813/2055)
レコードがない場合も用紙の最後まで罫線を出力する方法 というマイクロソフトのHPを紹介します
お礼
早速の回答ありがとうございます。 参考表示していただきました、ホームページを見てみます。
お礼
ありがとうございます。とっても我儘なお願いにもかかわらず、コードを公開していただいて、とっても助かります。 このコードを参考にがんばってみます。本当にありがとうございます。