- ベストアンサー
EXCELのマクロの重複起動の禁止
6時間くらい動作するEXCEL2000のマクロ作ったのですが、間違えて重複起動をしてしまうことがあります。 次のような対応策を考えてみたのですが、マクロの作り方がわかりません。 (1)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、現在動作しているマクロを終了し、新たにマクロを開始する方法 (2)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、エラーメッセージを出力する方法 (3)現在稼動しているマクロを表示確認できる方法 他の方法でも結構ですので、マクロをご教示ください。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。(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時間も稼動しているわけですから、プログレスバーでもなんでもよいので進捗状況を表示した方がよいでしょうね。 はずしていたら、すみません。
その他の回答 (2)
- WWolf
- ベストアンサー率26% (51/192)
まだまだ色んなパターンが想定されます。例えばファイル”あ”の中にマクロAとマクロBが存在し、ファイル”あ”を誤って二重起動してしまった場合やetc... どのパターンでも確実なのは、ある決められたフォルダー(c:\tempなど)にマクロAが起動しているというファイル(なんでもよい)を作成し全て完了したらそのファイルを削除する。
- WWolf
- ベストアンサー率26% (51/192)
重複起動をしては困る理由を補足説明お願い致します。 それにより対処方法が異なります
補足
マクロ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回動いてしまうのを防ぎたいと思っています。 よろしくお願いします。
補足
すみません。今、気が付いたのですが、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"), "マクロ" 説明不足で申し訳ありません