OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

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

  • すぐに回答を!
  • 質問No.153562
  • 閲覧数422
  • ありがとう数2
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 44% (55/123)

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

条件
1.1ページ10人で改ページをする。
2.所属コードが変わったら、10人に満たなくても改ページする。
3.所属コードが変わって改ページをする場合、空の行を補って1ページは常に10人分とする。
以上のような条件を満たす改ページ設定はできるのでしょうか?
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル8

ベストアンサー率 36% (14/38)

なんかカッコ悪いコードになっちゃいましたが
勘弁してください。

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

お礼率 44% (55/123)

ありがとうございます。とっても我儘なお願いにもかかわらず、コードを公開していただいて、とっても助かります。
このコードを参考にがんばってみます。本当にありがとうございます。
投稿日時 - 2001-10-23 08:33:30
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル14

ベストアンサー率 39% (813/2055)

レコードがない場合も用紙の最後まで罫線を出力する方法 というマイクロソフトのHPを紹介します ...続きを読む
レコードがない場合も用紙の最後まで罫線を出力する方法
というマイクロソフトのHPを紹介します
お礼コメント
ariga

お礼率 44% (55/123)

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

参考表示していただきました、ホームページを見てみます。
投稿日時 - 2001-10-19 21:50:47

  • 回答No.2
レベル8

ベストアンサー率 36% (14/38)

これはVBAを使用しないと解決できないかと思います。 幾つかの方法があって、まず1つはデータをまた別なテーブルへ移行し、同時に空白行を作成する方法。 例えば 元データテーブル    印刷時用一時テーブル 氏名   所属  →  氏名   所属 あーさん  1     あーさん  1       かーさん  1     かーさん  1 いーさん  2     空白行   1 きーさん   ...続きを読む
これは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

お礼率 44% (55/123)

早速の回答ありがとうございます。
回答文を読ませていただき、仕掛けについては「なるほど」と思ったのですが
実際のコードの記述については難しいみたいです。
そこで、もし差し支えがなければ、1つ目の方法について実際のコードを公開していただくことはできないでしょうか。
(撫しつけなお願いですいません)
投稿日時 - 2001-10-19 21:57:16
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ