• ベストアンサー

Excel97のマクロの問題?

 98SE上でExcel97を使用しています。 クエリーで、あちこちのデータベースからデータを取込み、突合せを行って、要素を絞って行くマクロを作成しています。  手作業で順番に行う分には問題なく、マクロをデータ収集毎に分けて実行しても問題ないのですが、マクロを繋げて一気に実行させると、必ず3つめのデータベースからの収集に入った時点で、ダンマリ状態になってしまいます。 「アプリケーションの強制終了」の表示では、「応答なし」には、なってはいませんが、終了を選択すると、「返事がない」旨のダイアログが出てしまいます。 どのPCから実行しても同様です。  これは、実装メモリ等の問題なのでしょうか、それともマクロの組み方で回避できる問題なのでしょうか。 ちなみに、試したPCのメモリはいずれも256MBでした。 何かわかる方がいらしたら、お知恵を拝借したいと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • yomo3
  • ベストアンサー率32% (88/269)
回答No.4

#2です。 適当なグローバル変数(例えばDone1など)をBooleanで定義してフラグのように使い、処理中はFalse、処理終了時にTrueを代入するようにプログラムを組みます。それぞれの処理の先頭で、そのフラグをチェックして、実行中(この場合、False)は処理しないというようにすればいいでしょう。

TK1961
質問者

お礼

 おかげさまをもちまして、問題の無返答の部分は、無事に解決したようです。(動いたとたん、全く別の自己バグが発見されましたが)  とにかく、これで先に進めます。本当にありがとうございました。

TK1961
質問者

補足

 ありがとうございます! 早速、試させていただきますね。

その他の回答 (3)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.3

こんにちは。 #2さんのご指摘の中にもあるとおりですが、 たとえば外部のアプリケーションを起動したりする操作の場合などのように、 「非同期処理」といって、ひとつの処理がすべて終了しないうちに、次の処理へ進んでしまう場合があります。 このような場合、ひとつひとつの処理を別々に実行した場合は正常に実行されるのに、 複数の処理を続けて実行すると、想定外の結果となってしまう、という現象が発生することがあります。 これを避けるには、同期的な処理(ひとつの処理が終わるまで実行をウエイトする)を行う必要があります。

TK1961
質問者

補足

 各データベースへのアクセスには、時間のかかる場合もあり、お二方のご指摘の通り、先のアクセス中に次のプロセスに移っていたりする可能性は大だと思われます。  ただ、指定処理日によって、各データベースから転送されるデータサイズも異なり、他のアプリケーションからのアクセス量の関係もあって、その処理時間は不定です。 このような場合、ポイントポイントで、処理の足並みを揃えるには、どのような方法がベストであるか、ご指導いただければ幸いです。

  • yomo3
  • ベストアンサー率32% (88/269)
回答No.2

黙ったまんまになってしまうのは、Excel自体のバグかもしれないと思うのですが、そういったバグを私は知りません。 ただ、マクロをつなげて実行すると、マクロの性質にもよりますが、マクロ1が終わってからマクロ2に移るというようには処理されず、同時に処理が実行されることがあります。マルチタスクですからね。 その結果、同時に同じファイルやシートにアクセスしてしまい、終了条件が立たず、帰ってこないなんてことも起こり得ます。 マクロの詳細が不明ですので、はっきりしませんが、そういったことも考えられます。

TK1961
質問者

補足

勝手ながら、同一の問題点を突いていただいている様ですので、No3のhappypointさんの補足欄に集約させていただきました。引き続きよろしくお願いします。

  • pippy
  • ベストアンサー率50% (232/458)
回答No.1

 モジュールの冒頭でオブジェクト変数を定義してデータベースに接続なさっているのだと思います。 ではそのモジュールの最後で set cnc = nothing などという形で、明示的に解放していらっしゃいますか?

TK1961
質問者

お礼

 自分ではそのつもりでしたが、複雑な追加をしているうちに、記述がおかしなことになっていた個所を、改めて確認してみて、発見できました。 が、残念ながら、根本の問題は解決出来ないようです。  しかし、どのみち上手く動かなかったことは確かだったと思います。ありがとうございました。