• ベストアンサー

ExcelのVBA

ExcelのVBAにてFor~Nextのプログラム処理中に スペース等の指定したボタンを押したらプログラムの処理を終了させる事はできるのですか? どうすれば良いのかわからないので教えてください。

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

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.2

ESCキーで抜けます。 Declare Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long Sub Test() Dim i As Long  For i = 1 To 10000    Range("A1").Value = i    If GetAsyncKeyState(27) <> 0 Then Exit For  Next i End Sub 参考: http://www1.plala.or.jp/chikada/cell/0101/0101.htm

makikki
質問者

お礼

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

その他の回答 (2)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.3

こんにちは。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 を使うことになります。

makikki
質問者

お礼

ありがとうございます

  • marbin
  • ベストアンサー率27% (636/2290)
回答No.1

こんなことでしょうか? Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub tst() Dim i As Long For i = 1 To 10 If Worksheets(1).Cells(1, 2).Value = 1 Then Exit For Worksheets(1).Cells(i, 1).Interior.ColorIndex = 5 DoEvents Sleep 1000 Next i End Sub

makikki
質問者

お礼

ありがとうございます。

関連するQ&A

専門家に質問してみよう