質問: excelのvba excelのvbaにてfor~nextのプログラム処理中に スペース等の指定したボタンを押したらプログラムの処理を終了させる事はできるのですか? どうすれば良いのかわからないので教えてください。
回答: こんにちは。kenken_sp です。 通常はマクロの実行を中断するキーは、 ・esc キー ・ctrl+break キー のいずれかです。この場合は、 application.enablecancelkey = xlerrorhandler として、中断キー押下でエラー18を発生させ、それをトラップします。 しかし、処理の途中でいきなりマクロの実行を停止させては困る場合が多い わけで、ある一定の処理を終了させた後、切の良いところで中止させるのが 普通です。 以下は、処理を続行するかどうかを問い合わせるサンプルです。 option explicit sub sample() dim blncancelflag as boolean dim intres as integer ' esc キー、ctrl+break キーでエラーハンドラに飛ばします application.enablecancelkey = xlerrorhandler on error goto error_handler ' サンプル用無限ループにするため for ではなく do にしました do '(処理) ' ループ処理の終わり=処理の区切りの良いところで終了確認 if blncancelflag = true then intres = msgbox("マクロが中断されました.中止しますか?", _ vbyesno + vbquestion + vbdefaultbutton2) if intres = vbyes then exit sub else ' 中断がキャンセルされたらフラグも元に戻す blncancelflag = false end if end if loop ' error_handler 以降が実行されない様にここで終了 exit sub error_handler: select case err.number case 18 ' 中断キーが押されるとエラー18が発生 ' 中断キーが押されたフラグをたてる blncancelflag = true ' 区切りの良いところで終了確認させるため、エラーをクリア ' して一度処理を続行させます err.clear resume case else ' その他エラーの場合 ' エラーメッセージを表示して終了 msgbox err.description, vbcritical exit sub end select end sub なお、スペースキーなどの規定外のキーでこのような処理を行うには、#2 ご回答のように キーの状態を調べる win32api を使うことになります。