• ベストアンサー

EXCELのマクロの重複起動の禁止

6時間くらい動作するEXCEL2000のマクロ作ったのですが、間違えて重複起動をしてしまうことがあります。 次のような対応策を考えてみたのですが、マクロの作り方がわかりません。 (1)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、現在動作しているマクロを終了し、新たにマクロを開始する方法 (2)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、エラーメッセージを出力する方法 (3)現在稼動しているマクロを表示確認できる方法 他の方法でも結構ですので、マクロをご教示ください。 よろしくお願いします。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。(2)の方法ですが、 1. プライベート変数myFlagを宣言 2. マクロの実行時に myFlag の値を調べる   2-1. False なら myFlagにTrueをセットし、以降のマクロを実行する   2-2. True ならマクロ実行中なので、処理中止 3. 一応、全ての処理の最後に、 myFlag = True としておく のような処理になるかと思います。具体的には、 Private myFlag As Boolean Sub TEST()   If myFlag Then     MsgBox "既に実行中です..."     Exit Sub   End If   'myFlag=Falseなら以降を実行   myFlag = True   '(略)これ以降に処理を書く   '処理の最後に一応   myFlag = False End Sub こんな感じでしょうか。 あとは、6時間も稼動しているわけですから、プログレスバーでもなんでもよいので進捗状況を表示した方がよいでしょうね。 はずしていたら、すみません。

QAZ123
質問者

補足

すみません。今、気が付いたのですが、Aplication.OnTimeは、その処理が完了しなくても、次の処理に進むんですね。 実は、マクロAから別のマクロBを、10分おきに、36回 Application.OnTimeで起動していたので、マクロA自体は終了済みで、一瞬にmyFlag = Falseになっていました。 Application.OnTime TimeValue("09:00:00"), "マクロ" Application.OnTime TimeValue("09:10:00"), "マクロ"             ・             ・             ・ Application.OnTime TimeValue("15:00:00"), "マクロ" 説明不足で申し訳ありません

その他の回答 (2)

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.3

まだまだ色んなパターンが想定されます。例えばファイル”あ”の中にマクロAとマクロBが存在し、ファイル”あ”を誤って二重起動してしまった場合やetc... どのパターンでも確実なのは、ある決められたフォルダー(c:\tempなど)にマクロAが起動しているというファイル(なんでもよい)を作成し全て完了したらそのファイルを削除する。

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.2

重複起動をしては困る理由を補足説明お願い致します。 それにより対処方法が異なります

QAZ123
質問者

補足

 マクロAから別のマクロBを、9時から15時まで10分おきに、36回 Application.OnTimeで起動しています。 Application.OnTime TimeValue("09:00:00"), "マクロB" Application.OnTime TimeValue("09:10:00"), "マクロB"             ・             ・             ・ Application.OnTime TimeValue("15:00:00"), "マクロB"  8時にマクロAを起動し、誤って10時にマクロAを起動した場合、10時以降はマクロBが2回動いてしまうのを防ぎたいと思っています。  よろしくお願いします。