アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAです。

ユーザーフォーム上で、call xxxxxを使って呼び出したsubプログラムでの計算を
途中で終了させるために
コマンドボタンにendを割り当てて使用しています。

ただ、この方法だとユーザーフォームも一緒に終了してしまうため、
また再度ユーザーフォームを呼び出す必要があります。

callで呼び出したsubプログラムだけを途中で終了させる方法を教えてください。

A 回答 (2件)

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
    • good
    • 0

>callで呼び出したsubプログラムだけを途中で終了させる方法を教えてください。



End

ではなく、

Exit Sub

としてみて下さい。
    • good
    • 5

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A