<HOME  <お願い事項   <Access2002 TOP   <Access97 TOP   <サイト内検索
 MS-Access2000--VBAの小屋>ページ合計
   1 2



今回は、VBAでないとちょっと無理かな・・・っていう処理をいくつかお話しようと思います。
といっても、あまりにも漠然としてますんで・・・。
レポートというオブジェクトがありますね。印刷物を設計するためのオブジェクトです。
まあ・・・パソコンソフトですから・・・得意な分野もあれば、苦手な分野もあるわけです。んでもって、根本的にそういう考え方がない、っていうことも、多々あるわけで・・・(北の国から風)

そう。Accessの「レポート」というオブジェクトは、改ページとか、ページ合計とか、いわゆる「用紙のサイズや印刷装置に左右される」操作って、ちょっち苦手ですね。まあ、こういうものなんで。あたしに文句言われても困るし。

こんな感じのテーブルがあったとして、

これをもとに、ちょっとした一覧表を作ろうと思ってます。
まあ、こんな感じで・・・。↓



たとえば、このレポートの中で、全社の売上合計を出したい、と、思ったら、レポートフッター部分でSum関数を動かせば、
最後のページの一番最後のレコードのすぐ下に、合計金額が計算されて出てきます。

出ます。



でも、同じような考え方で、ページ合計を各ページごとに出したい、と思ってページフッター部分でSum関数を動かしても、

なんか、エラーになってるみたいですよね。
Sum関数は、ページフッター部分では動かないんです。



動かないというか・・・この部分を出力しようとしているときは、まだ、ページ合計の値がつかめないんですね。どのレコードのところで改ページされるか、レコードがどういう順番に並んで出てくるか、出力してみるまでわからないからです。
なぜか?ということについては、レポートを構成する各セクションについて、もっと理解を深めていく必要がありそうですね。この辺はヘルプを紐解いていただくとして・・・。じゃあ、どうすればいいか?どうしてもページ合計を印刷したいんだけど・・・というとき、方法のひとつとして「VBAで処理を書く」方法が挙げられます。



どうするかというと、すっごくオーソドックスな方法ですけど、1行ずつ「売上」を足し算していくのです。

どうやって???
うーん。そうですね。どっか、足した数を保存しておける入れ物みたいなものを用意して、改ページする前に、その入れ物の中身を「ページ合計」を印刷したいテキストボックスの中に放り込んで、入れ物の中身をゼロにして、次のページに移る・・・と、こんなイメージでしょうか。


んじゃ、もう一度レポートのデザインを眺めてみましょう。
このレポートの、「詳細」というところで、「売上」を足し算して、「ページフッター」というところで非連結のテキストボックス(わたしは「テキスト20」っていう名前のテキストボックスを作りました)に代入します。

フォームほどではありませんけれど、レポートにも独特の「イベント」というものがあるんです。それをうまく活用していきます。
印刷物ですからね。紙に印刷してからのイベントはありえないですから(あたりまえだっつの)、イベントの種類としては、フォームほど複雑ではないと思います。
で、肝心の、「売上を足し算して入れておく入れ物」なんですけど、いわゆる「変数」ってやつを使います。

とりあえずやってみましょうか。
イベントプロシージャの作り始めのとこは、オッケーですよね。
ここんとこまごまごしちゃうと結構きついです。詳細セクションのプロパティの中の、「イベント」のとこを見ます。

「フォーマット時」と「印刷時」ってのがありますね・・・。どう違うのかな。
とりあえず「フォーマット時」ってとこのイベントで、売上の足し算をやってみましょうかね。

まず、足し算するための器を用意します。いわゆる変数ってやつです。
変数っていうとすごく難しそうですけど、ようするに「とりあえずこのプロシージャの中で、値を入れておく入れ物」だと思ってください。

でも、残念ながらVBAでは、好き勝手に変数を使うことはできません。

 まず、変数の名前を決めて(プロシージャ名と同じで、ありがちな名前は避けよう)
 その変数名を使わせてくれ、とお願いをして(Dimステートメントという行でお願いする)
 できれば、その変数にはどういった種類の値が入ってくるのか決めておく(数値とか文字とか)


という段取りで、変数の宣言をします。

Dimという単語で書き出した行は、このプロシージャの中でこういう名前の変数を使わせてくれ、っていうか使うぞ、という意思表示になります。
んじゃ、とてもわかりやすくAAAという名前の変数を使おうかな。売上金額を足し算するので、数値型。。。Long(長整数型)にしよう。


で、AAAの中に、売上金額を足し算していくんですが、これ、毎行毎行加算していくんですよね。
だから、AAAの中身は、今までのAAAに売上金額を足した数、ということになります。
このへんがとってもBasicっぽい考え方かもしれないですね。

↑これと、

↑これでは、ぜんぜん違うので、うっかり間違えちゃわないように気をつけてくださいね。