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



で、次に、ページフッター部分で、AAAの中身をテキスト23に移そうと思うんです。
ページフッターの「フォーマット時」のイベントを作りましょうか。

でも・・・ここでひとつ、問題があります。
AAAという変数の中に、詳細セクションが繰り返された分だけその行の「売上」が加算されていってるはずなんですけど、この変数、詳細_Formatという名前のプロシージャの中で宣言してますんで、このプロシージャの中だけで有効なんですね。変数ってそういうものなんですよ。

でも、このプロシージャの中で足し算してゲットした答えを、ページフッタのテキスト20に書き出したいので・・・これから書くページフッターセクション_Formatでも使えるようにしたいんです。ぶっちゃけた話、AAAっていう変数を、ふたつのプロシージャで使いたいんですよ・・・。
意味わかんなくても、なるほど、って思って読んでください。プログラミングの学習なんて、6割は「自己暗示」ですよ。「思い込み」じゃないですよ。「自己暗示」です。

そういう場合は、変数の宣言する場所を、このモジュール内の一番上のとこにしましょう。
と、こんな感じで・・・一番上の、Option Compare Databaseって書いてあるすぐ下あたりにDim文を移してみてください。
↓これで、このモジュール内で共通してAAAという変数の中の値をやり取りすることができるようになるんです。



で、ページフッターセクション_Formatの中で、テキストボックスにAAAという値を代入して、んで、次のページに移動するのでAAAの中身をゼロにしておきます。あ、1ページごとの集計じゃなくて、累計みたいな感じにするなら、ゼロにしなくてもよいでしょう。


レポートをプレビューしてみると・・・。
取り合えずなんか答えっぽいのが出てますね。

ん。1089892008円ね。


別に疑うわけじゃないんですけど・・・。検算してみました。このレポート、社員番号0001から順に社員番号順に並べてますので、同じように1ページ分のデータをExcelに打ち込んで集計してみました。

社員番号 名前  売上
0001 イアン・ギラン  228804
0002 マイケル・シェンカー 9102944
0003   スティーブン・タイラー   103209
0004   ジミー・ペイジ 4029445
0005   アンガス・ヤング  -102999010
0006  ジョン・ボン・ジョヴィ  403945943
0007   リッチー・ブラックモア 643830
0008 トミー・ショウ 120480
0009 ブライアン・メイ 990234
0010 ポール・ギルバート 102950
0011 ジョン・クーガ 285730
0012 ブライアン・アダムス 20
0013 オジー・オズボーン 25
0014 ニール・ショーン 57593
0015 エドワード・ヴァン・ヘイレン 457384
0016 ジェフ・ベック 287445
0017 スティーブ・ルカサー 283790
0018 柳ジョージ   79347
0019 コージー・パウエル 12345473
0020 ランディー・ローズ 6039487
0021 デヴィッド・カバーデイル 641255180
0022 マイケル・マクドナルド 39445743
0023 ジョー・ペリー 3209584
0024 カルロス・サンタナ 54394342
0025 エリック・クラプトン 95845
0026 ラリー・カールトン 654844
0027 ジミ・ヘンドリックス 9493748
0028 トム・ショルツ 57340
0029 ミック・ジャガー 54389
0030 ジョー・ウォルシュ 325489
0031 ピーター・クリス 1432764
0032 ケニー・ロギンス 593847
0033 デヴィッド・リー・ロス 278431
0034 リック・スプリングフィールド 27244
0035 スティーブ・ハケット 123895
0036 エイドリアン・スミス 2039400
 合    計 1089587208

・・・ちがうやんけー。
ん・・・どこが違うんじゃ???いくつ違うのかな。計算間違いってことはまさかありえないと思うんだけど・・・。
まさか、2ページ目の1レコードめまで足しちゃってるとか・・・

社員番号 名前 売上
0001 イアン・ギラン 228804
0002 マイケル・シェンカー 9102944
0003 スティーブン・タイラー 103209
0004 ジミー・ペイジ 4029445
0005 アンガス・ヤング -102999010
0006 ジョン・ボン・ジョヴィ 403945943
0007 リッチー・ブラックモア 643830
0008 トミー・ショウ 120480
0009 ブライアン・メイ 990234
0010 ポール・ギルバート 102950
0011 ジョン・クーガ 285730
0012 ブライアン・アダムス 20
0013 オジー・オズボーン 25
0014 ニール・ショーン 57593
0015 エドワード・ヴァン・ヘイレン 457384
0016 ジェフ・ベック 287445
0017 スティーブ・ルカサー 283790
0018 柳ジョージ 79347
0019 コージー・パウエル 12345473
0020 ランディー・ローズ 6039487
0021 デヴィッド・カバーデイル 641255180
0022 マイケル・マクドナルド 39445743
0023 ジョー・ペリー   3209584
0024 カルロス・サンタナ 54394342
0025 エリック・クラプトン 95845
0026 ラリー・カールトン 654844
0027 ジミ・ヘンドリックス 9493748
0028 トム・ショルツ 57340
0029 ミック・ジャガー 54389
0030 ジョー・ウォルシュ 325489
0031 ピーター・クリス 1432764
0032 ケニー・ロギンス 593847
0033 デヴィッド・リー・ロス 278431
0034 リック・スプリングフィールド 27244
0035 スティーブ・ハケット 123895
0036 エイドリアン・スミス 2039400
0037 グラハム・ボネット 304800
合   計 1089892008
 

どうやらあたりのようだ・・・。

改ページしてんのに、2ページ目の1レコード目も、1ページ目のページ合計に足してやがる・・・。

どうやら、1ページ目の「ページフッターFormat」の処理より、2ページ目の1レコード目の「詳細Format」の処理の方が一足先に実行されちゃってるみたいですねぇ・・・。
Formatイベントのヘルプを見ると、「レポートの [詳細] セクションの場合、Format イベントは、セクションの各レコードのデータがフォーマットされる直前に発生します。」みたいなことが書いてあるので、どうやらその辺の順番の問題みたいです。

ためしに、イベントを変えてみましょうか。
フォーマット時のイベントのとこの「イベントプロシージャ」というのは消しちゃって、印刷時のイベントを作るとしましょう。

やることは同じなので、そのままコピーしてもよいし、練習がてらもう一度書いてもよいでしょう。
んで、Format時のイベントはもういらないので、2行とも消しちゃってください。



どうでしょう。答え、違ってくると思うんですけど・・・。

ふう。何とかなりそうでしょうか。


こんな感じで、VBAというのは、コードの中身の書き方もさることながら、どのイベントで動かすか、によってもいろいろと変化が生じます。

VisualBasicの知識だけでは、なかなかままならないものなんです。AccessのVBAなら、Accessのオブジェクトに関していろいろ知っておかなければならないし、ExcelのVBAならExcelのシートや関数の知識がないとまずダメ。どうしても、コードの書き方そのものに目が行きがちですけど、けっきょくVBそのものの書き方がわかっても、それをどこでどうやって動かすか・・・Accessのレポートやフォームの構造やイベントに関して理解を深めておかないとならないってわけです。

そっちはそっちでいろいろ大変そうですよねぇ。ふう。前途多難だ。

でも、これで、「レポートでページ合計出すときのポイント」、ご理解いただけたんじゃないかなって思います。
ぜひ活用してみてくださいね。