web-dev-qa-db-ja.com

Escキーを押したときにExcelマクロの実行を停止できない

XPでExcel 2007を実行しています。

エスケープを押す以外に、マクロの実行中にマクロの実行を停止する方法はありますか?通常、無限ループを作成したり、何かを台無しにしたりすると思ったら、エスケープを押してエラーをスローしますが、マクロは停止します。

今回(そして、以前はやったことがありますが、それほど悪くはありませんでした)、いくつかの迅速なデバッグのためにmsgboxをセットアップしました。約6000回ループする必要があったため、6000のメッセージボックスを「OK」する必要があり、数分かかりました。実行する前に保存しなかったため(別の間違い)、タスクマネージャーを開いて終了できませんでした。

こんなふうになった場合にマクロの実行を停止する別の方法はありますか?

33
ptpaterson

つかいます CRTL+BREAK 任意の時点で実行を一時停止します。中断モードになり、押すことができます F5 実行を継続するか F8 ビジュアルデバッガーでコードをステップごとに実行します。

もちろん、これはメッセージボックスが開いていない場合にのみ機能するため、何らかの理由でVBAコードがメッセージボックスを常に開いている場合、適切なタイミングでキーを押すのは少し面倒になります。

実行中にほとんどのコードを編集することもできます。

Debug.Printを使用して、VBAエディターの イミディエイトウィンドウ にメッセージを出力します。これは、MsgBoxよりも便利です。

breakpoints またはStopキーワードを使用して、対象領域での実行を自動的に停止します。

Debug.Assertを使用して、- 条件付きで実行を停止 できます。

51
Tomalak

CTRL + SCR LK(スクロールロック)が機能しました。

15
VBANoob

時には、正しいキーのセット(Pause、 Break または ScrLk) キーボードでは使用できません(ほとんどの場合、ラップトップユーザーで発生します)。 Esc 2、3、または複数回でもマクロは停止しません。

私も立ち往生し、最終的にはWindowsのアクセシビリティ機能で解決策を見つけました。その後、すべての調査済みのオプションを試し、そのうち3つは3つの異なるシナリオで機能しました。

ステップ#01:キーボードに特定のキーがない場合は、心配しないで、Windowsユーティリティから[オンスクリーンキーボード]を押してください。 Win + U

ステップ#02:ここで、以下のオプションのいずれかを試してください。これらのオプションは、システムアーキテクチャ、つまりOSとOfficeのバージョンに応じて確実に動作します

  • Ctrl + Pause
  • Ctrl + ScrLk
  • Esc + Esc (連続して2回押す)

マクロが実行を一時停止して現在のタスクを終了すると、上記のキーの組み合わせを使用してブレークモードになります。例えばWebからデータをプルする場合、次のコマンドを実行する直前に停止しますが、データをプルした後、次のコマンドを押すことができます F5 または F8 デバッグを続行します。

6
jainashish

を押すとマクロを停止できます ctrl + break ただし、ブレークキーがない場合、この autohotkey (オープンソース)コードを使用できます。

+ ESC :: SendInput {CtrlBreak} return

押す shift + Escape 押すようなものになります ctrl + break したがって、マクロが停止します。

このページ へのすべての栄光

4
Lisa

また、デバッグにMsgBoxを使用することも好きで、この同じ問題に何度も遭遇しました。現在、私は常にポップアップに[キャンセル]ボタンを追加し、[キャンセル]が押された場合はマクロを終了します。サンプルコード:

    If MsgBox("Debug message", vbOKCancel, "Debugging") = vbCancel Then Exit Sub
2
Robert

2番目のExcelウィンドウを開いてその2番目のウィンドウでマクロを実行すると、最初のウィンドウの実行が停止することがあります。なぜそれが常に機能しないのかわかりませんが、試してみてください。

1
Manuel

ボタン「Break」またはボタン「sys rq」で「FN」またはファンクションキーを押すこともできます。これはシステム要求です。一緒に押す必要があり、実行中のマクロはすべて停止します。

1
AMR

マクロを実行する前に、MsgBoxで行をコメントアウトするのを忘れました。意味10万回以上[OK]をクリックする必要があります。 ESCキーはメッセージボックスをエスケープするだけで、マクロの実行を停止しませんでした。 ESCキーを数秒間押し続けると、コードの実行を停止できました。

0
Yemi Adeoye

これは決してエレガントなソリューションではありません。あなたが必死でない限り、私はお勧めしません。

データを繰り返し処理する場合、ループ内のフォルダー内のファイルの存在を確認できます。つまり、フォルダー内に特定のファイルが見つからない限り、コードの実行を継続できます。これを行うには、次の行を追加します。

DirFile = FilePath & "ExampleFolder\stop.txt"
If Len(Dir(DirFile)) = 0 Then
Else
    MsgBox ("Code stopped by stopfile")
    Exit Sub
End If

ループの終わりに。 ExampleFolderにstopというテキストファイルを追加すると、これはサブルーチンを終了します。

0
bm13563

ESCとCTRL-BREAKは今のところうまくいきませんでした。しかし、CTRL-ESCは機能しました!?理由はわかりませんが、他の人に役立つ場合に備えて、そこに捨てると思いました。 (ループ内でi = i + 1を忘れていました...)

0
dave