- ベストアンサー
マクロを停止するマクロ
エクセル(2003)のマクロですが。 シートに CommandButton をふたつ貼り付け、ひとつ(CB1)はマクロをスタートさせ、もうひとつ(CB2)はマクロを停止させるボタンにしたいのですが。 CB2は、 Ctrl + Break と同様のことを実行し、実行中のマクロの内容に関わらず処理を停止できるようにしたいのですが。 CB2はどのような記述になるでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
VBAではスレッド管理できませんが、元のコードにフラグを常に監視させるようにしておいて、別のコードからそのフラグを操作するという方法が使えます。 http://www.k2.dion.ne.jp/~jan2005/tips/excel1_6.html DoEventsをしつこいぐらいに実行しておかないと、元のコードが走りっぱなしになって他からのイベントを受け付けないので注意。 Ctrl + Breakはそのまんま本当に強制停止なので、Sendkeyで強制停止されるのではなく、要はキャンセルボタンとして考えましょう。
その他の回答 (3)
- zap35
- ベストアンサー率44% (1383/3079)
本格的にはVBAのマルチスレッドを考えなくてはならないのでしょうが、戯れ程度でよければこんな感じでもできました Sub mSatrt() Do While Range("B1") = "" Range("A1").Value = Format(Time, "HH:MM:SS") DoEvents For idx = 1 To 100 Next Loop Range("B1") = "" End Sub Sub mStop() Range("B1") = "S" End Sub
お礼
ありがとうございました。 大変参考になりました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 コードを見てみないとはっきり言えませんが、通常、停止したマクロの場合は、モジュールレベルでフラグを以下のように置いて、 Private flg As Boolean 判定させることにしますが、これは、Ctrl + Break と同等ではありません。Ctrl + Break というのは、Interrupt を発生させますが、マクロが稼動中は、コマンドボタンではイベントが発生しませんので、ESCに対して、ユーザー設定のErrorを発生させて、Error トラップをしなければいけません。 コマンドボタンで行う場合は、マクロを一時完全停止状態にさせて、フラグを反転させるなどしなければなりません。それは、実際のコードで、やってみなければわかりません。一般論では解答は不可能です。 いずれにしても、それは、コードを見せていただかないと、どこの掲示板でも、はっきりしたことは言えないと思います。
お礼
ありがとうございました。 大変参考になりました。
mougで改めて、ご質問されてはどうでしょうか? そちらのほうが、回答も早く来るかと思いますよ。 http://www2.moug.net/bbs/exvba/
お礼
ありがとうございました。
お礼
ありがとうございました。 大変参考になりました。