Please visit our sponsors.
スポンサーも訪れて下さい

トップページ ★MSアクセスウエッブカレッジサンプル(ダウンロードする)|業務統合4in1小さな会社用『感嘆!』  

サブマクロの終わらせ方(1)

掲示板に「私も、マガジン楽しみにしている一人です。
で、頑張っているんですが、昨日作ったマクロのサブマクロが、思った回数で終わりません。


10分も黙っているので変だと思ったら、エンドレスで動いているみたいなんです。どこをいじっても駄目で、あちこちいじっているうちエラーがでてとまりました。どうなるのかと怖かったです。

サブマクロの実行回数を回数でなく、最後のデータまでやりたいのですが、うまくいきません教えてください」 とありました。

似たような質問も幾つか来ましたので、今回これをテーマにします。テーマの選び方が、安易だって?まあこんなもんですよ。我慢我慢。 で、サブマクロって何だっけてことはないですよね。サブマクロなんて使ったことない人も結構いるみたいですね。使わない人は、どんなときに使うのか、かなり疑問のようです。

【サブマクロ」が必要な訳】

サブマクロが無いとどうなるのか、なんて哲学的なことは、さておいて、サブマクロを使うときを考えて見ると、

  1. 繰り返し処理をするデータがあるとき
  2. マクロが大きくなりすぎてしまったとき
  3. 条件で処理が異なるとき
  4. 共通の処理があるとき

などが思い浮かぶ。他にもありそうなんだけど、もう連休も近く頭が回りません。繰り返し処理をするケースは結構ありますが、処理の仕方では、クエリーで解決させてサブマクロ化させないことができます。

クエリーは処理も早いので有効ですが、多くのデータを複数処理を連携する場合は、クエリーの制限がありますから注意が必要となります。サブマクロの終わらせ方はこの処理ケースの説明になり 案SPEED。


マクロが大きくなりすぎたとき、マクロを処理のグループ単位分けることがあります。長く大きなマクロは、分析しずらく、エラー分析が困難ですから、できるだけ短いもので整理するこほうが賢明だと思います。マクロを,分解すると、サブマクロの処理になりますが、このケースは大体処理回数1回ですから、特に設定しなくてOK、指定しなければ1回実行されます。


条件によって、処理が異なる場合、多くの場合は、ちょっと処理が違うのですが、例えば宅配便伝票印刷で、ヤマトと佐川の場合のように、マクロは、ヤマト、佐川のサブマクロが作成されて、条件でこのマクロが実行されます。ただこれも回数は、1回でしょう。


共通の処理があるとき、決まった金額計算をやる場合、そのマクロは共通サブマクロにしておくときがあります。それぞれ,マクロを書かず、共通マクロを利用します。これも開発の効率化になりますが、初心者の方にはおすすめできません。いえ、馬鹿にしているわけではありません、共通マクロが本当に共通かどうかが結構難しかったりするのでつい、


マクロは、多くのフォームその他に関連つけされて出来上がっていますが、システムを作成していく上でこの環境が変化してくるわけですが、このとき、うっかり共通マクロも修正した、ところが、それによって,他のマクロで使っている環境が合わなくなってしまったが、本人はそれに気がつかなかった。今まで、動いていたのに、そうしてか,原因がわからなかったが、結局、この共通マクロに原因があって、この場合は、共通マクロを別々にすることになった。


サブマクロを使う形態は、
 
  • 「マクロ」標準パターン
  •   処理1(アクション)
  •   処理2(アクション)
  •   処理3(アクション)
  •   サブマクロ
  •   処理4(アクション)
  •   処理5(アクション)
  •   終了
もう少し複雑なパターンを紹介しますと

「マクロ」  処理1(アクション)
  処理2(アクション)
  処理3(アクション)
         サブマクロA
              処理1(アクション)
              処理2(アクション)
          サブマクロ終了
  処理4(アクション)
  処理5(アクション)
         サブマクロB
             処理1(アクション)
          サブマクロ終了
  処理5(アクション)
  処理6(アクション)
  終了


のようなものもあります。マクロの階層は、5段階くらいできるのかな?ちょっと忘れましたが、上記3階層は問題ありません。

サブマクロ内でも当然、処理1(アクション)等が行われます。このとき、サブマクロは、終了すると、もとのマクロに戻り、マクロの残りの処理を終えて、全てのマクロ終了となります。


今回のテーマ。「サブマクロの終わらせ方」とは、上記のサブマクロ終了のところです。サブマクロは何も指定しないと、1回実行して、主マクロに戻ります。上記利用形態で言うと、2,3,4はこのケースになることが多いので、終わらせ方は余り問題になりません。


一番問題になるのは、1の多いデータを繰り返し処理をする場合でしょう。100人の生徒の成績を合計して平均を出し、そのデータを成績データに複写する場合を考えて見ましょう。


手順1 生徒データは表形式のフォームに作成します。
    テーブルのままでは、扱いにくいので表形式のフォームにします。
    必要に応じてデータの選択、並び替えのためクエリーを使うことも
    あるので。
手順2 主マクロの作成
手順3 サブマクロの作成 
手順3 サブマクロの終わらせ方の設計と実行
   終了


「サブマクロの終わらせ方:エンドレスループに注意」

サブマクロの終了は、回数で終了させる方法と、条件で終わらせる方法がある。回数は、何も問題なく終了させることができるでしょう。又、掲示板の方のように、エンドレスにならないよう、実験段階では,回数で確認することをおすすめします。


エンドレスループに入ると、大変です。メモリが一杯になるまで実行してしまい。思わぬ故障が発生します。もしエンドレスループに入ったと予感したら、どんな方法でもいから、強制終了させてください。


WINDOWS2000.NTなら、タスク終了できます。
(意味がわからない人は気にしないでいいですよ)


どうしてエンドレスループになるかといえば、まさに、サブマクロの終わらせる条件設定が、間違っているからです。私も、今まで、多くの上記エラー現象を味わっています。一度は皆さんも味わってください。エンドレスループを故意に作ってみてください。楽しいですよ。


「サブマクロをWFERE条件文で終わらせる」

サブマクロをWEHER条件で終わらせるということは、「データの最後まで処理したら終了する」というようにすることです。従って、考えるポイントは、データの終わり(最後)をどうやってつかむかと言うことになります。これが思いつけば、40%ぐらい解決したといえるかも知れません。


次回は、この方法を明かします。皆さんも実験して、答えがでたら、掲示板に答えてください。



2 サブマクロの回数について



★前回のテーマ

お得で便利なNTTネットワークサービス!クリックしてみて!


メール:macro@mscn.net

| トップ4in1曙司法書士システム公益法人
|弁理士用大丈夫弁護士用大丈夫ARA ! |
| マクロ研究会MSアクセス入門マガジン |マクロ会議室ダウンロード