![]() |
||
<HOME <お願い事項 <Access2002 TOP <Access97 TOP <サイト内検索 | ![]() |
|
![]() |
||
MS-Access2000--VBAの小屋>ページ合計 |
今回は、VBAでないとちょっと無理かな・・・っていう処理をいくつかお話しようと思います。
といっても、あまりにも漠然としてますんで・・・。
レポートというオブジェクトがありますね。印刷物を設計するためのオブジェクトです。
まあ・・・パソコンソフトですから・・・得意な分野もあれば、苦手な分野もあるわけです。んでもって、根本的にそういう考え方がない、っていうことも、多々あるわけで・・・(北の国から風)
そう。Accessの「レポート」というオブジェクトは、改ページとか、ページ合計とか、いわゆる「用紙のサイズや印刷装置に左右される」操作って、ちょっち苦手ですね。まあ、こういうものなんで。あたしに文句言われても困るし。
こんな感じのテーブルがあったとして、
これをもとに、ちょっとした一覧表を作ろうと思ってます。
まあ、こんな感じで・・・。↓
たとえば、このレポートの中で、全社の売上合計を出したい、と、思ったら、レポートフッター部分でSum関数を動かせば、
最後のページの一番最後のレコードのすぐ下に、合計金額が計算されて出てきます。
出ます。
でも、同じような考え方で、ページ合計を各ページごとに出したい、と思ってページフッター部分でSum関数を動かしても、
なんか、エラーになってるみたいですよね。
Sum関数は、ページフッター部分では動かないんです。
動かないというか・・・この部分を出力しようとしているときは、まだ、ページ合計の値がつかめないんですね。どのレコードのところで改ページされるか、レコードがどういう順番に並んで出てくるか、出力してみるまでわからないからです。
なぜか?ということについては、レポートを構成する各セクションについて、もっと理解を深めていく必要がありそうですね。この辺はヘルプを紐解いていただくとして・・・。じゃあ、どうすればいいか?どうしてもページ合計を印刷したいんだけど・・・というとき、方法のひとつとして「VBAで処理を書く」方法が挙げられます。
どうするかというと、すっごくオーソドックスな方法ですけど、1行ずつ「売上」を足し算していくのです。
どうやって???
うーん。そうですね。どっか、足した数を保存しておける入れ物みたいなものを用意して、改ページする前に、その入れ物の中身を「ページ合計」を印刷したいテキストボックスの中に放り込んで、入れ物の中身をゼロにして、次のページに移る・・・と、こんなイメージでしょうか。
んじゃ、もう一度レポートのデザインを眺めてみましょう。
このレポートの、「詳細」というところで、「売上」を足し算して、「ページフッター」というところで非連結のテキストボックス(わたしは「テキスト20」っていう名前のテキストボックスを作りました)に代入します。
フォームほどではありませんけれど、レポートにも独特の「イベント」というものがあるんです。それをうまく活用していきます。
印刷物ですからね。紙に印刷してからのイベントはありえないですから(あたりまえだっつの)、イベントの種類としては、フォームほど複雑ではないと思います。
で、肝心の、「売上を足し算して入れておく入れ物」なんですけど、いわゆる「変数」ってやつを使います。
とりあえずやってみましょうか。
イベントプロシージャの作り始めのとこは、オッケーですよね。
ここんとこまごまごしちゃうと結構きついです。詳細セクションのプロパティの中の、「イベント」のとこを見ます。
「フォーマット時」と「印刷時」ってのがありますね・・・。どう違うのかな。
とりあえず「フォーマット時」ってとこのイベントで、売上の足し算をやってみましょうかね。
まず、足し算するための器を用意します。いわゆる変数ってやつです。
変数っていうとすごく難しそうですけど、ようするに「とりあえずこのプロシージャの中で、値を入れておく入れ物」だと思ってください。
でも、残念ながらVBAでは、好き勝手に変数を使うことはできません。
まず、変数の名前を決めて(プロシージャ名と同じで、ありがちな名前は避けよう)
その変数名を使わせてくれ、とお願いをして(Dimステートメントという行でお願いする)
できれば、その変数にはどういった種類の値が入ってくるのか決めておく(数値とか文字とか)
という段取りで、変数の宣言をします。
Dimという単語で書き出した行は、このプロシージャの中でこういう名前の変数を使わせてくれ、っていうか使うぞ、という意思表示になります。
んじゃ、とてもわかりやすくAAAという名前の変数を使おうかな。売上金額を足し算するので、数値型。。。Long(長整数型)にしよう。
で、AAAの中に、売上金額を足し算していくんですが、これ、毎行毎行加算していくんですよね。
だから、AAAの中身は、今までのAAAに売上金額を足した数、ということになります。
このへんがとってもBasicっぽい考え方かもしれないですね。
↑これと、
↑これでは、ぜんぜん違うので、うっかり間違えちゃわないように気をつけてくださいね。
![]() |
![]() |
![]() |