• ベストアンサー

VBAでcallで呼び出したsubを終了させる

VBAです。 ユーザーフォーム上で、call xxxxxを使って呼び出したsubプログラムでの計算を 途中で終了させるために コマンドボタンにendを割り当てて使用しています。 ただ、この方法だとユーザーフォームも一緒に終了してしまうため、 また再度ユーザーフォームを呼び出す必要があります。 callで呼び出したsubプログラムだけを途中で終了させる方法を教えてください。

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

  • ベストアンサー
  • heno-_-
  • ベストアンサー率100% (6/6)
回答No.1

Subプロシージャを外部から終了させるのは、実用的ではありません。 Subプロシージャの中で、停止ボタンが押された場合には、 計算処理を中断するような仕組みにしておくと良いと思います。 下記のコードは、ユーザフォームに「 実行ボタン( cmdAction ) 」と 「 停止ボタン( cmdStop ) 」を配置した場合のサンプルです。 グローバル変数で停止フラグを定義し、 フラグがOFFの間は処理を続け、 フラグがONになったら終了するプログラムになっています。 '' 停止フラグ Public bStopFlg As Boolean ''------------------------------ '' [ 実行 ]ボタン押下時 ''------------------------------ Private Sub cmdAction_Click() '' フラグをOFF bStopFlg = False '' 計算処理実行 Call cal End Sub ''------------------------------ '' [ 停止 ]ボタン押下時 ''------------------------------ Private Sub cmdStop_Click() '' フラグをON bStopFlg = True End Sub ''------------------------------ '' 計算処理 ''------------------------------ Sub cal() Do While True '' 何らかの計算処理 Cells(1, 1) = Cells(1, 1) + 1 Application.Wait Now + TimeValue("00:00:01") DoEvents '' [停止]ボタンが押された場合( フラグがON ) If bStopFlg Then If MsgBox("中断しますか?", vbQuestion + vbYesNo) = vbYes Then Exit Do Else bStopFlg = False End If End If Loop End Sub

その他の回答 (1)

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

>callで呼び出したsubプログラムだけを途中で終了させる方法を教えてください。 End ではなく、 Exit Sub としてみて下さい。