<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 Access2000物置き>データがなくても10行分罫線を引くレポート



【仕 様 な ど】MS-Access2000で作成。Windows98/WindowsNTで動作確認。

【ダウンロード】
←Zip形式
               (解凍後、mdb初期状態:およそ240KB)

 【主 な 機 能】Microsoftのサイトの情報をもとに作りました。要VBA知識。


★Access97のとき、うまく動かなくて取り下げたやつの「リベンジ」です★
でも・・・なぜうまく動かなかったのか謎なんです。これもうまく動かないケースがあるかもしれません。
そうしたらまた、掲載をちょっと見合わせるかもしれませんです。あらかじめご了承を・・・。



「請求書」とか「見積書」みたいな感じのレポートって、やっぱり「データがなくてもあっても10行なら10行分、罫線引きたい」って思うときありますよね。
でも、MS-Accessのフォームやレポートの考え方って、「詳細セクション×レコードソースとなっているテーブルかクエリのレコード件数」分、印刷するって感じなんです。だから、レコードが3件なら、罫線も3本、ってことになります。

それに、MS-Accessのレポートで言うところの「罫線」って、正確には罫線じゃないですよね。図形の「直線」です。
だから多分、皆さんが思い描いているようなことが、意外なトコでできなかったりするんですよ。

んじゃ、どうすればいいか・・・これってどんな開発ツールでも、皆さん結構苦労してらっしゃるところなんです。

マイクロソフトのサポート情報欄に、こんな情報があります。
「レコードがない場合も用紙の最後まで罫線を出力する方法(文書番号:J022350)」
(リンク先のURLは変更になることがあると思います。その場合はタイトルや文書番号を手がかりに探してください)

VBAコードのサンプルが載ってます。
これをもう一工夫して、ちょっとした請求書レポートを作ってみました。

こんな感じの結果が出てくるクエリがあります。これをもとにして作ったレポートです。
伝票番号ごとにグループ化して、伝票番号ごとに誰が何をいくついつ買ったのか一覧になるようなレポートです。

で、「請求書」というレポートを開くと・・・。請求書00000000002(?)のレコードは、そのとき売った商品が4種類だったので明細が4行になるはずなんですが、5行目から下は空印刷させてます。

これには・・・。
レポートのNextRecordっていうメソッドを使います。詳しくはヘルプを引いてみてください。

これを意図的に「false」にすることによって、レポートはレコードソースの基となっているテーブルやクエリ(この場合はQ_売上明細)の中の次のレコードへ移動しなくなるのです。
これをうまく利用して、値のない状態で罫線だけ印刷される行と、ふつうに印刷される行を作り出しているのです。

レポートの「詳細セクション」のフォーマット時イベントを見ていただけるとお分かりと思いますが、大きく分けて4択になっています。

と、こんな感じです。

下の図で行くところの、きみどり色の矢印の先のテキストボックス(非連結)で、同じ伝票番号を持つレコードがこのクエリ内に何件存在してそうか調べます。あ、マイクロソフトのサンプルではDcount関数使ってます。これでもオッケーです。

その数と、詳細セクションが繰り返された回数を毎回比較しながら、上記4パターンのうちのどれに当たるか判断して、改ページするか、改ページせずデータをふつうに印刷するか、空回りさせるか・・・そんな処理をやってます。

赤い矢印のトコに、改ページコントロールがあります。普段はこれ、「不可視」にしたいんですけど・・・Access2000って、改ページコントロールの「可視プロパティ」、なくなっちゃったのかしら。97の時はあったような気がしたんですけど・・・。見つからなかったので、とりあえずコードの中で制御してます。

この処理で難しいのは、プロシージャ内の i という変数内に格納される数の部分だと思います。
要するに、1行印刷するごとに1足してるんですが、足し算する場所やタイミングによっては、足されずずーっと1のままで、その結果空印刷だけのレポートを何百ページも出力してほぼ永久ループにはまっちゃったりすることもあります。
(きみどり色の矢印の先のテキストボックスでの計算結果と比較して、これを超えない限り改ページしないしデータも印刷しないですから・・・)なんか動きが変だわ、永久ループかしら???と思ったら、とりあえずキーボードのCtrl+Breakキーを押して止めてください。
で、変数 i に1を足すタイミングを、一番先頭にするとか一番最後にするとか、変更して様子を見てみてください。

こんななので、「印刷すると全部で4枚なんだけど、2ページめだけでいいわ」なんて、途中ページだけの印刷をしようとしたりすると、20行目の次が31行目になったりしちゃうこともあります。いちおう、1ページ目から順番に印刷されることを想定してますので、その辺もご注意ください。


少々VBA知識が必要と思います。
少なくとも、「VBAEditorの使い方がわからない」という方は・・・使用を見合わせてください。
エディタと、レポート内の各イベントについて多少承知していただいている方なら、問題なく使っていただけると思います。
ざっと見ていただいて、修正するのは、「詳細セクション−フォーマット時イベント」のコードの、FalseにしたりTrueにしたりしてるテキストボックスの名前などの部分ですね。これを、皆さんのレポート内のテキストボックス等の名前に変更していただければよいでしょう。

まずは、上のレポートを眺めていただいて、一体何をFalseにしたりTrueにしたりしているのか、その辺観察してみてくださいね。