プロが教える店舗&オフィスのセキュリティ対策術

6時間くらい動作するEXCEL2000のマクロ作ったのですが、間違えて重複起動をしてしまうことがあります。
次のような対応策を考えてみたのですが、マクロの作り方がわかりません。

(1)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、現在動作しているマクロを終了し、新たにマクロを開始する方法
(2)マクロの起動時に、マクロ内で現在動作しているマクロと重複チェックを行い、エラーメッセージを出力する方法
(3)現在稼動しているマクロを表示確認できる方法

他の方法でも結構ですので、マクロをご教示ください。
よろしくお願いします。

A 回答 (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時間も稼動しているわけですから、プログレスバーでもなんでもよいので進捗状況を表示した方がよいでしょうね。

はずしていたら、すみません。

この回答への補足

すみません。今、気が付いたのですが、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"), "マクロ"
説明不足で申し訳ありません

補足日時:2004/12/14 21:01
    • good
    • 0

まだまだ色んなパターンが想定されます。

例えばファイル”あ”の中にマクロAとマクロBが存在し、ファイル”あ”を誤って二重起動してしまった場合やetc...

どのパターンでも確実なのは、ある決められたフォルダー(c:\tempなど)にマクロAが起動しているというファイル(なんでもよい)を作成し全て完了したらそのファイルを削除する。
    • good
    • 0

重複起動をしては困る理由を補足説明お願い致します。


それにより対処方法が異なります

この回答への補足

 マクロ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回動いてしまうのを防ぎたいと思っています。
 よろしくお願いします。

補足日時:2004/12/15 03:51
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A