[[20110904223743]] 『マクロを途中で止めたい』(ぺんぺん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロを途中で止めたい』(ぺんぺん)

 マクロ実行中に強制的に止めたいとき escキーや ctrl+breakキーで止められることが
 多いと思いますが、次のようなコード実行中にうまく止めることができませんでした。

 選択範囲にあるセルのうち、ある条件にあったセルだけに特定の処理をしたいので
 うまくその条件のセルを拾っているか確認のためのテストだったのですが、If文の
 ロジックが間違っていてすべてのセルが該当してしまい、数千のセルを選んで実行すると
 メッセージボックスが次々と表示され続けました。そして、メッセージボックスが
 表示されている間は Escキーや ctrl+breakキー が効かないようです。

 Sub test()
    Dim WorkCell As Range

    For Each WorkCell In Selection
 '        If WorkCell xxxxxxxxxxxxxxxxx Then ← ここでの条件のセルをチェック
            WorkCell.Select
            MsgBox "check!"
 '        End If
    Next
    MsgBox "check終了"
 End Sub

 結局Enterキーを数千回押して(実際はキーを押しっぱなしにしてずーっっと待つ)、
 やっと終わったのですが、途中で中断する方法は ctrl+alt+delete は最後の手段と
 して、それ以外にないものなのでしょうか。

 ※※ついでに、 Escキー と ctrl+breakキー の動作の違い等あれば、今後の参考の
 ために知りたいと思います。


 テストする方法として 
・stop をコードに入れたり
・ブレイクポイントを指定する
・F8でコードをひとつひとつ実行してく
・イミディエイトウィンドウに表示させる等の方法もあります。http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_vbe.html

 名無しさん、ありがとうございます。

 ロジックがおかしいかもしれなかったり無限ループになったりしそうなときにそなえた
 コードや、テストのやり方を工夫しなくてはいけないのは、今度のことでわかったの
 で、今後気をつけようと思っています。

 ここでの質問の趣旨は、「マクロを途中で止める方法」が知りたいということです。

 ctrl+alt+delete しかないのでしょうか。

 (ぺんぺん)

 基本的には Ctrl + Break で停まるはずですが...

 私の環境(MacにVMWareを入れてそれにWindows7が入ってそれにExcel2007が乗っている)の場合、
 マクロ実行中に、右上の[赤×]をクリックすると、
 下の画面になって止めることが可能です。(kazu)

 Microsoft Office Excel は応答していません。
 プログラムを再起動したり、閉じたりすると。情報の回復が試みられます。
 →プログラムを再起動します
 →プログラムを終了します
 →プログラムの応答を待ちます

 MsgBoxが出現した状態で、ESC と Enter を同時に押下してください。
 運が良ければ(同時に押下できれば)Debug mode になります。
 (seiya)

 何かのキーやボタンクリックなどで処理を止めたい
 ということですか?

 一例ですが、新規ブックの標準モジュールに

 '=========================================================
 Option Explicit
 Declare Function GetAsyncKeyState Lib _
        "User32.dll" (ByVal vKey As Long) As Long
 Sub test()
    Application.OnKey "{F1}", ""
    Do
       [a1].Value = [a1].Value + 1
       If GetAsyncKeyState(vbKeyF1) Then Exit Do
    Loop
    DoEvents
    Application.OnKey "{F1}"

 End Sub

 testを実行してみてください。
 セルA1に1を加算し続けますが、F1キーを押すことで
 処理を中断します。

 ichinose

 


 kazuさんのレスの通り、【基本的には Ctrl + Break で停まる】。
いちど、だまされたと思って

 Sub TestLoop()
    Do
        MsgBox "OK"
    Loop
 End Sub

 これで試してみて。

 (ぶらっと)


 ↑
 Ctrl + Break じゃ止まらないからやっちゃだめだよ。
 > MsgBoxが出現した状態で、ESC と Enter を同時に押下してください。
 > 運が良ければ(同時に押下できれば)Debug mode になります。
 (seiya)

 みなさん、ありがとうございます。

 ◆kazuさん、ぶらっとさん
 >基本的には Ctrl + Break で停まるはずですが...

 今勤務先のPC(WindowsVista)で確認しましたら、 Ctrl + Break で止まりました。
 きのうは自宅のPC(Windows7)でやっていて、 Ctrl + Break が効かないと
 思ったのですが、帰ったら確認してみます。

 ◆seiyaさん
 >ESC と Enter を同時に押下してください。

 何回かやってみると、止まりました。こんな方法は知りませんでした。

 >Ctrl + Break じゃ止まらないからやっちゃだめだよ。

 私の最初の質問に書いたコードでやってみると、Ctrl + Break で止まりました。
 ぶらっとさんのコードはやってみていないのですが、こっちは止まらないのですか?
 試してみようかと思わないでもないですが、ほんとに止まらなかったら嫌だなと思い、
 まだやってみてません。

 ◆ichinoseさん
 >何かのキーやボタンクリックなどで処理を止めたいということですか?

 そういうことではなく、単に動いているマクロを途中で止める方法を知りたい、
 ということでした。
 書いていただいたコードはなんだか難しそうで、すぐにはわかりません。
 余裕ができたら勉強したいと思います。(^_^;

 (ぺんぺん)


 >Ctrl + Break じゃ止まらないからやっちゃだめだよ。

 2003(というかXP)ならとまる。2007,2010(Win7)は未確認だけど、とまらないのかな?

 (ぶらっと)

 Windows7 では無理でしたねーー。
 (seiya)


 元質問のぺんぺんです。

 今自宅のPCで実験をしたのですが、意外なことがわかりました。
 自宅のPC(デスクトップ、Windows7)も勤務先のPC(ノート、WindowsVista)も
 キーアサインの変更をしていて、capslock キーに ctrlキーを割り当てています。

 ふだんはキーアサインの変更など意識せず、ctrl+○○ の操作はすべて capslockの
 表示があるキーを使っています。 ctrl + break ついても、同様にやっていて、
 昨日は自宅のPCでマクロが止まらず、今日、勤務先のPCではマクロが止まりました。

 で、自宅のPCで ctrlと表示はあるが、capslockの機能を割り当ててあるキーを使って
 Ctrl + break をやると、見事にマクロが止まりました。

 我が家のPCでは、ctrlの表示のあるキーが、ふだんは capslock の働きをするのが、
 brakeキーと一緒に押したときには ctrl の働きをする、ということになります。

 Vistaと7の違いなのか、キーボードの仕様の違いなのか、なんだかよくわかりません。

 右ctrlキーはアサインの変更をしておらず、このキーを使うと普通に ctrlキーの
 働きをすることも確認できました。
 (今まで右ctrlキーなど使ったことがありませんでした。) 

 また、自宅のPCでは esc と enter の同時押しは何回やっても上手く止まりません。

 なお、自宅・勤務先ともExcel2010 は入っているのですが、ふだんは Excel2003 を
 使っていて、今回のマクロの件もすべて 2003 での話です。

 余裕ができたら、2010でも確認してみたいと思います。

 (ペンペン)


 今、自宅のWin7(エクセルは2010)で確認。Ctrl/Breakで、問題なくとまった。

 (ぶらっと)

 おっと、失礼しました。
 私の Break key は FN + Breakでした。(DynaBook)
 Ctrl + Breakでは止まらないはずです。
 混乱させてすみません。
 (seiya)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.