• ベストアンサー

Access2000のレポートで条件付改ページの方法を教えて下さい。

Access2000で「所属コード」と「社員氏名」が入っているレポートを作りました。 枠線もつけてひととおりできたのですが、改ページの方法がよくわかりません。 以下の条件で改ページを行なうにはどうしたらよいのでしょうか? データは、所属コード毎にまとまっていて、さらに同じ所属コードのなかでは社員氏名(50音順)になっています。空白のデータ行はありません。 条件 1.1ページ10人で改ページをする。 2.所属コードが変わったら、10人に満たなくても改ページする。 3.所属コードが変わって改ページをする場合、空の行を補って1ページは常に10人分とする。 以上のような条件を満たす改ページ設定はできるのでしょうか?

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

  • ベストアンサー
  • klub
  • ベストアンサー率36% (14/38)
回答No.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件ぎりぎりで作成しておけば別ですが)

ariga
質問者

お礼

ありがとうございます。とっても我儘なお願いにもかかわらず、コードを公開していただいて、とっても助かります。 このコードを参考にがんばってみます。本当にありがとうございます。

その他の回答 (2)

  • klub
  • ベストアンサー率36% (14/38)
回答No.2

これは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の参考本にこの類のサンプルプログラムがあるので 参考にしてみてはいかがでしょうか。 ではではがんばってください。

ariga
質問者

補足

早速の回答ありがとうございます。 回答文を読ませていただき、仕掛けについては「なるほど」と思ったのですが 実際のコードの記述については難しいみたいです。 そこで、もし差し支えがなければ、1つ目の方法について実際のコードを公開していただくことはできないでしょうか。 (撫しつけなお願いですいません)

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.1

レコードがない場合も用紙の最後まで罫線を出力する方法 というマイクロソフトのHPを紹介します

参考URL:
http://www.microsoft.com/JAPAN/support/kb/articles/J022/3/50.htm?LN=JA&SD=SO&FR=0
ariga
質問者

お礼

早速の回答ありがとうございます。 参考表示していただきました、ホームページを見てみます。