• ベストアンサー

マクロを停止するマクロ

エクセル(2003)のマクロですが。 シートに CommandButton をふたつ貼り付け、ひとつ(CB1)はマクロをスタートさせ、もうひとつ(CB2)はマクロを停止させるボタンにしたいのですが。 CB2は、 Ctrl + Break と同様のことを実行し、実行中のマクロの内容に関わらず処理を停止できるようにしたいのですが。 CB2はどのような記述になるでしょうか?

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

  • ベストアンサー
  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

VBAではスレッド管理できませんが、元のコードにフラグを常に監視させるようにしておいて、別のコードからそのフラグを操作するという方法が使えます。 http://www.k2.dion.ne.jp/~jan2005/tips/excel1_6.html DoEventsをしつこいぐらいに実行しておかないと、元のコードが走りっぱなしになって他からのイベントを受け付けないので注意。 Ctrl + Breakはそのまんま本当に強制停止なので、Sendkeyで強制停止されるのではなく、要はキャンセルボタンとして考えましょう。

gpvlrd
質問者

お礼

ありがとうございました。 大変参考になりました。

その他の回答 (3)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

本格的には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

gpvlrd
質問者

お礼

ありがとうございました。 大変参考になりました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 コードを見てみないとはっきり言えませんが、通常、停止したマクロの場合は、モジュールレベルでフラグを以下のように置いて、  Private flg As Boolean   判定させることにしますが、これは、Ctrl + Break と同等ではありません。Ctrl + Break というのは、Interrupt を発生させますが、マクロが稼動中は、コマンドボタンではイベントが発生しませんので、ESCに対して、ユーザー設定のErrorを発生させて、Error トラップをしなければいけません。 コマンドボタンで行う場合は、マクロを一時完全停止状態にさせて、フラグを反転させるなどしなければなりません。それは、実際のコードで、やってみなければわかりません。一般論では解答は不可能です。 いずれにしても、それは、コードを見せていただかないと、どこの掲示板でも、はっきりしたことは言えないと思います。

gpvlrd
質問者

お礼

ありがとうございました。 大変参考になりました。

noname#57758
noname#57758
回答No.1

mougで改めて、ご質問されてはどうでしょうか? そちらのほうが、回答も早く来るかと思いますよ。 http://www2.moug.net/bbs/exvba/

参考URL:
http://www2.moug.net/bbs/exvba/
gpvlrd
質問者

お礼

ありがとうございました。

関連するQ&A