街中で見かけて「グッときた人」の思い出

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

条件
1.1ページ10人で改ページをする。
2.所属コードが変わったら、10人に満たなくても改ページする。
3.所属コードが変わって改ページをする場合、空の行を補って1ページは常に10人分とする。
以上のような条件を満たす改ページ設定はできるのでしょうか?

A 回答 (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件ぎりぎりで作成しておけば別ですが)
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/10/23 08:33

これは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つ目の方法について実際のコードを公開していただくことはできないでしょうか。
(撫しつけなお願いですいません)

補足日時:2001/10/19 21:57
    • good
    • 0

レコードがない場合も用紙の最後まで罫線を出力する方法


というマイクロソフトのHPを紹介します

参考URL:http://www.microsoft.com/JAPAN/support/kb/articl …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

参考表示していただきました、ホームページを見てみます。

お礼日時:2001/10/19 21:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報