![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--VBAの小屋>シマシマレポート |
レポート関係で、もう一ネタやってみようと思います。「明細行を交互に色変えて印刷するレポート」です。
これは基本的に無理なんですけど、いろいろ離れ業を使ってやってみよう、という試みです。
まず、なぜ無理なのか、ということですけど・・・これは皆さんお分かりですよね。
色というのは、詳細セクションの背景色のことですよね。
Accessのレポートやフォームというのは、この詳細セクションの部分の設定や書式を、レコードソースのレコード数分繰り返す、というイメージになります。レコード数分詳細セクションが用意されてるわけではないのです。
したがって、背景色や文字の大きさなど、各種書式プロパティも、設定は1行分。これを件数分ただ単に繰り返すだけなので、行によって色を変えたりという考え方はありません。これをふべんーと思う場合も無きにしも非ずですけど、この考え方のおかげでレポートやフォームで大量のレコードを気軽に扱うことができたりもするので・・・あまり悲観的にならず、前向きに検討しましょう。ファイトファイト!
では、考え方です。
1行おき、ということは、なんかよい判断の仕方がないですかねぇ。。。
たとえば、偶数行は白、奇数行はねずみ色、とか・・・。
これちょっと考えてみましょうか。
まず、ねずみ色って、VBAではどうやって判断するかというと、数字です。色のコードがあるんで、「12632256」これがねずみ色ですね。え?なんでって?しょうがないじゃないですか決まってるんだからっ。
参考までに、黄色が10092543、水色は16777164、赤が255、白が16777215、黒が0です。
で、この数字を、詳細セクションの背景色プロパティに代入してやるって感じになります。
ここでひとつ疑問が生じるとこなんですけど・・・詳細セクション、ってどう書けばいいんでしょう。
テキストボックスでもないから、Me!詳細 じゃたぶん通じないと思うし・・・・。
という疑問に到達した方はエライ!
詳細セクションとかページフッターセクションって、レポートそのもののプロパティの一部になります。これがですね、
Me.Section….
っていう書き方になるんです。
ヘルプで「Sectionプロパティ」っていうのを探してみると・・・。
設定値 | 定数 | 内容 |
0 | acDetail | フォームの [詳細] セクションまたはレポートの[詳細] セクション |
1 | acHeader | フォーム ヘッダーまたはレポートヘッダー |
2 | acFooter | フォーム フッターまたはレポートフッター |
3 | acPageHeader | フォームのページ ヘッダーまたはレポートのページヘッダー |
4 | acPageFooter | フォームのページ フッター またはレポートのページフッター |
5 | acGroupLevel1Header | グループ レベル 1 のヘッダーセクション (レポートのみ) |
6 | acGroupLevel1Footer | グループ レベル 1 のフッターセクション (レポートのみ) |
7 | acGroupLevel2Header | グループ レベル 2 のヘッダーセクション (レポートのみ) |
8 | acGroupLevel2Footer | グループ レベル 2 のフッターセクション (レポートのみ) |
ううう・・・わけがわかんないですけど、1行目だけ見てください。つまり、セクションの0、っていうのが、詳細セクションのことなんです。
Me.Section(0)
これで、詳細セクションのことになります。
これ、ちょっと頭に置いておくと結構便利ですよ。覚えなくてもよいですけど、ヘルプの「ここを引けば載ってる」みたいな感じで覚えとくと、いざというとき役に立つと思います。
とりあえずフォーマットイベントのとこに作ってみましょう。こんな感じかな・・・。
これで印刷すると、多分全部ねずみ色になっちゃうと思います。これでしましまになったら怖いですよね。
さて、あとは、偶数か奇数か、っていう判断をさせたいんですけど、これにはいろんなやり方があるかな・・・。
わたしはいつも、コンピュータっぽく、「2で割って、あまりが1のばあいは奇数、0の場合は偶数」って判断させたりしてます。
これはですね。割り算の「あまり」を見てくれるMODという計算方法があるんで、わりと手軽にできるんですよ。
ABB = 10 Mod 2
とやると、ABBの中には10割る2のあまりが入ります。割り切れるから、0になるはず。
つまり・・・さっきの、売上金額を加算するときと同じ要領で、行数をカウントアップして、その行数を割り算して、あまりが1だったら背景を白、それ以外はねずみ色(逆でもいいけど)って感じにしようかと思うんです。
ここで焦っちゃダメですよう。ゆっくりやりましょうね。ゆっくりね。
まず、行数を数えて、今何行目?偶数行?奇数行?ってことを判断したいんで、行数を加算していくための変数を宣言します。
宣言するとこは一番上ですね。繰り返し繰り返し使うんだし、ここがいいでしょう。Integerというのは整数型という数値型です。データ型については、また後日お話しますね。
で、詳細セクションのフォーマット時に、1加算します。
基本的に、数値型の変数は、宣言してすぐはゼロになってくれてる・・・と思うんですけど、ほんとは、レポートを開くときにBBBにゼロを代入しておくのが理想ですね。これは後でやりましょう。
で、このBBBを2で割ったとき、あまりが・・・という条件判断を、If文を使ってやってやります。
If文、オッケーですか?チャレンジしてみましょう。
うーん、1行目のときは、BBBの中身は「1」ですよね。1÷2は・・・余りが1???ってことになりかねないので、IF文の条件としては、0だったらどうする、それ以外だったらどうする、って感じにしましょうか。
その方が安全な気がする。
と、こんな感じ?
このレポート開くとこんな感じ・・・。↓
ん・・・。1行目をねずみ色にしようと思ったんだけど、はずれたかな・・・。
偶数か奇数か、の判定をしているんですから、まず各行をフォーマットしているときにBBBがいくつなのか、それが知りたいですね。
じゃあ・・・レポートのどこかに、テスト用のテキストボックスをひとつ作ってみましょう。わたしのは「テキスト23」っていう名前でした。
で、下のように、↓BBBの値を代入してみます。
なんか・・・開くたびに、数字が変わったりしてません???わたしだけかな・・・。
だいたい、42件しかないのに、なんで44番から始まってるんじゃいっ。
変数をうまいことクリアしておかないと、下手すると、ずーっとずっと前に代入した値が残ってる可能性があるんですね。
だからといって神経質になってしょっちゅうしょっちゅうゼロにしてたらほしい値もゼロになっちゃいますけど・・・ええと、どうすればいいのかな。
レポートを開くときと、ページフッターのフォーマット時のイベントで、ゼロを代入するようにしましょうか。
どうでしょう。今度はオッケーですよね。
もし、色を変えたいとき、白とねずみ色の順番を入れ替えたいときは・・・If文のとこ書き換えればうまくいくはずです。
そしたらもう、テスト用に追加したテキスト23はいらないですね。削除してしまってもかまわないし、そのまま残して左端に移動させて、行番号にしてもいいですね。
あ、テキストボックスを削除したら、詳細フォーマット時のイベント内に書き足した Me!テキスト23 = BBB も削除してくださいね。忘れないように。
これと同じことをフォームでやろうと思っても・・・これ、フォームではできないんです。
フォームの構造やイベントについて詳しく知る必要がありますけれど・・・。フォームというのはレポートと違って、動きがありますよね。
「1画面に収まるのが1ページ」って思っても、スクロールバーを動かすことで、1ページに表示されるレコードの内容って異なってくるし、ウィンドウのサイズを変えることもできるし、データの入力しなおしとか追加とかすると、レコードの順番も変わる可能性がありますよね。
そうした中で、見た目シマシマってのは、無理なんだろうなぁと、わたしはそんな見方をしています。
とりあえずできないんで、フォームでシマシマ、はあきらめた方がいいんじゃないかなぁと思います。
できるかできないか、どうやるのか、ということよりも、レポートのときどうやってやったか、どういう仕組みだったか、というところをしっかり見ておいてくださいね。
![]() |
![]() |
![]() |