<HOME <お願い事項 <Access2000 TOP <Access97 TOP <サイト内検索 | ||
Ac2002--VBAの沼 > レポートでページ合計 | ||
1 2 |
今回は、フォームではなくてレポート内で動かすプロシージャを作ってみましょうかね。
基本的には、フォームと同じです。
レポートでも「イベント」という考え方があり、なんかのきっかけでプロシージャが動くようします。
ただ、フォームに比べると、レポートって「動き」のないものなので(紙に印刷した後じゃどうしようもないから「クリック時」「更新後処理」なんてイベントは存在しないし)、あんまりこまごまとしたプロシージャを作ることはないかもしれないですね。
ではまず、一般的なレポートの「構造」を見てみましょう。
レポートの場合は、テキストボックスなどのコントロールひとつひとつに対してではなく、「セクション」というものがターゲットになることが多いです。
セクションというのは、こういうグレーの部分から下のところですね。赤線で印をしているところです。
このグレーの部分をダブルクリックすると、そのセクションのプロパティが出てきます。
「イベント」っていうところ、ありますよね。
これらのどこかに、プロシージャを作成することになるかと思います。
あるいは、レポート全体か・・・フォームと同じで、左上のレポートセレクタボタンをダブルクリック(プロパティが既に出ているときはクリックでも)すれば、レポート全体のプロパティが出てきます。
どのプロパティを見ても、イベントの数はそんなにないですよね。
では・・・。何か作ってみましょう。
レポートでは通常できないことを、VBAでやってみようということで・・・。「ページ合計」を出してみましょうかね。
金額や個数の合計とか、件数のカウントなんかをヘッダーフッター部分に出したい場合の話なんですが、フォームだと、テキストボックス作って、Count関数とかSum関数なんかで出すことができますよね。
例えば、こんなテーブル(これはクエリなんですが、まあ、こういう結果を得ることができる状態で)があったとしまして、
仮に、こんな感じの一覧を印刷するレポートを作ってあったとします。
で、このレポートのデザインは大体こんな感じなんですけどね。
売上金額の合計を出したいなぁと思ってます。
レポートの、一番最後にあたる「レポートフッター」部分に非連結のテキストボックスを置いて、このテキストボックスのコントロールソース欄にSum関数を使えば、
(実際には、プロパティでこう入力する↑)
(ついでに、書式も設定しとく)
最後のページの最後のレコードの次のところに、全データの合計金額が出ます。
また、「分類」ごとに合計を出すこともできますね。
これには、「グループ化」という設定が必要です。ツールバーの「並べ替え/グループ化」ボタンをクリックします。
出てきたウィンドウに、「分類」ごとに並べ替えをするように指定をします。
さらに、「グループフッター」というものを出しておきます。
そうすると、「分類フッター」というセクションが新しく追加されます。
ここに、さっきのSum関数を入れたテキストボックスをドラッグして移すと、
わかりにくいですが・・・。
分類ごとにデータが並ぶようになって、さらにそれぞれの分類の最後に、合計金額が出るようになるわけです。
でも・・・。
各ページの最後に、ページ合計を・・・と思っても、これ、できないんですよ。
ページフッターにSum関数持ってきても・・・。
エラーになります。なんだエラーって!!!
なんでですかねー。でも、こういうもんなんです。できないんですよ。
そこで、ページフッター部分に、ページ合計を出したい場合のやり方です。
でも・・・ほんとうは、リレーショナルデータベースで「ページ合計」って、あんまり意味がないような気がするので・・・たとえば、レポートの「詳細セクション」の高さとかによって、1枚に印刷できる件数が変わってくるわけですよね。こういうの、データベースでは、集計を取るタイミングとして有効とは、考えないんです。
たとえばグループ化をしてグループごとの合計とかなら、意味があると思うんですけどね(グループごとに改ページすればよいのだし)。なので、もしページ合計を出さなくちゃならなくなった場合は、ほんとうにページ合計が必要なのかどうか、じっくり検討してみてください。
時には、やらなくちゃならない場合もあると思いますので、そういう場合は次の方法にチャレンジしてみてください。