- ベストアンサー
実行中のマクロを中止(中断)したい。
エクセル2003でマクロを勉強中です。 ユーザーフォームにボタンを二つ配置し「ボタン1」は次の命令で アクティブセルがタイマーで移動します。 この移動中(マクロの実行中)に「ボタン2」クリックで中止させる命令が可能でしょうか? Private Sub CommandButton1_Click() Dim i As Integer For i = 1 To 100 ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) Next i End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DoEventsを使ってみては如何でしょうか。 長い処理を行っているときに、キャンセルしたい場合などに使います。 (他にも用途はありますが) 詳しい内容はリンクを確認ください。 Dim CancelFlg As Integer Private Sub CommandButton1_Click() Dim i As Integer CancelFlg = 0 For i = 1 To 100 DoEvents ActiveCell.Value = 1 ActiveCell.Offset(1, 0).Activate Application.Wait (Now + TimeValue("0:0:01")) If CancelFlg = 1 Then Exit For Next i End Sub Private Sub CommandButton2_Click() CancelFlg = 1 End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
標準モジュールに Sub test01() For i = 1 To 1000000 Cells(1, 1) = i DoEvents If i = 200000 Then MsgBox "AA" Next i End Sub シートにコマンドボタンを1つ張り付け Private Sub CommandButton1_Click() Stop End Sub を入れる。 Test01を実行して早いうちに、ボタンをクリックすると Stopで止まったが。 これでは止まって、その後の処理は(実行ー継続をクリックという手操作なしでは)続けられないからダメでしょうね。
お礼
早速の回答ありがとうございます 当方、初心者で理解できない部分もありますが勉強させていただきます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Excel 2003 なら、以下のようにしてもとまると思います。 Wait よりも、Sleep のほうがよいです。もし、これ以上、反応を速くしたいとなると、コードを全面的に変えなくてはなりません。 '------------------------------------------- Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Private flg As Boolean Private Sub CommandButton1_Click() Dim i As Integer flg = False For i = 1 To 100 If flg Then Exit Sub ActiveCell.Offset(i - 1, 0).Value = 1 DoEvents Sleep 1000 'Application.Wait (Now + TimeValue("0:0:01")) Next i End Sub Private Sub CommandButton2_Click() flg = True End Sub
お礼
ありがとうございます。 今回の件についてはNo.2様の回答で解決できましたのでこの内容についてはじっくり研究させていただきます。お礼のポイントは付けられませんが、今回ポイントの付け方がわかりましたので、相当前にWendy02様にお答えいただいたものに本日ポイントを付けさせていただきました。 ふざけてるようかもしれませんがまじめなお礼の気持ちです。
- zap35
- ベストアンサー率44% (1383/3079)
Waitメソッドでは制御がWindowsに戻らないのでボタンが押せないのではないですか? Do~Loopの中でDoEventsを入れて制御をWindowsに戻す方法が一般的ではないかと思います。 参考になりそうなサンプルがありましたよ http://www.ichikura.com/excel-contents/excontent/excon3.htm
お礼
早速の回答ありがとうございます。 参考のサンプルもとても面白そうです。 こういうのがあること自体知らない初心者です。 じっくり楽しませてもらいます。
お礼
あっという間にこれだけのお答えを作っていただき感激です。 if then でなんとかとは思っていましたがDoEvents を知りませんでした。 ありがとうございました。