- ベストアンサー
DO~LOOP でのLOOPの抜け方
コマンドボタンを押して(スタートボタン)DO~LOOPで実行しているときにストップコマンドボタンを押してストップさせるときの LOOPの抜け方がわかりません。すみませんがよろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
#2と#4のtinu2000です。 stop_flag を共通変数にしないと、それぞれ別の変数とみなします。 ここから下をコピー&ペーストして見て下さい。 Public stop_flag As String Private Sub CommandButton1_Click() Dim i As Integer, n As Integer, b As Integer, a As Integer stop_flag = False Do a = 1 For i = 0 To 7 Range("a1") = a For n = 0 To 500 Next n a = a + 1 Next i a = 2 For b = 0 To 7 Range("b1") = a For n = 0 To 500 Next n a = a * 2 Next b DoEvents If stop_flag = True Then Exit Do Loop End Sub Private Sub CommandButton2_Click() stop_flag = True End Sub
その他の回答 (6)
- MovingWalk
- ベストアンサー率43% (2233/5098)
#1,5です。 #6の回答について。 >Public stop_flag As String stop_flag は、True/False の値を持つ型なので String ではなく Boolean ですよね。
お礼
わかりました!IF文を置く場所が悪かったのがわかりました。回答有難うございました。
- MovingWalk
- ベストアンサー率43% (2233/5098)
#1です。#2の補足について。 If stop_flag = False Then Exit Do ではなく If stop_flag = true Then Exit Do でなければ... 念のため、DO の前の行に stop_flag = False をいれておいてください。
補足
回答有難うございます。とりあえずLoopから出ることが出来ました。有難うございました。ただ、STOPButtonを押せば直ぐに止まらずにLoopから出ないと止まらないんですね・・。(考えてみれば当たり前ですが・・)押したら直ぐにLoopから出られる(Loopする数字が押した瞬間に止まる)ようになるにはどのようにしたらいいのでしょうか?すみませんがよろしくお願いします。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
#2のtinu2000 です。 maruru01さん、そうでしたそうでした、DoEvents を忘れていました。 質問を見て、瞬間的なイメージは DoEvents はあったんですが、 書いている内に忘れてしまいました。(汗) maruru01さん、ありがとうございました。 あれではストップボタンが割り込まないですね。
補足
続きです。すみませんよろしくお願いします。
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。maruru01です。 基本的には、No.2の方のように、フラグを立てる方法です。 ただ、ストップボタンをクリックする割り込み処理を入れるために、DoEventsを入れます。 No.2の方のを拝借して、 Private Sub Command1_Click() 'スタートボタン ExitSw = 0 Do DoEvents ・・・ If ExitSw = 1 Then Exit Do ・・・ Loop ・・・ End Sub Private Sub Command2_Click() 'ストップボタン ExitSw = 1 End Sub
補足
回答有難うございます。ただ全然初心者なのでまだ出来ません・・。tinu2000様の補足に抜けられないプログラムを出したのですが、わかりません。すみませんよろしくお願いします。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
Private Sub Command1_Click() 'スタートボタン ExitSw = 0 Do ・・・ If ExitSw = 1 Then Exit Do ・・・ Loop ・・・ End Sub Private Sub Command2_Click() 'ストップボタン ExitSw = 1 End Sub 他にも方法があると思うけど、こんなんでいいんでない?
補足
回答有難うございます。ただ・・どうしても抜けられません・・。全然初心者なのでまだわかりません。 Private Sub CommandButton1_Click() Dim i As Integer, n As Integer, b As Integer, a As Integer Do a = 1 For i = 0 To 7 Range("a1") = a For n = 0 To 500 DoEvents Next n a = a + 1 Next i a = 2 For b = 0 To 7 Range("b1") = a For n = 0 To 500 DoEvents Next n a = a * 2 Next b If stop_flag = False Then Exit Do Loop End Sub Private Sub CommandButton2_Click() stop_flag = True End Sub 7回まわってLOOPする形のものを中身を変えて出したのですが、どうしても止まりません・・。何がわるいのでしょうか?
- MovingWalk
- ベストアンサー率43% (2233/5098)
強制的にループを抜けるには、exit do を使えばいいんじゃないでしょうか?
お礼
IF文を置く位置が悪かったのがわかりました。わざわざプログラムを書いていただいて有難うございました。
補足
回答有難うございました。とりあえずLoop地獄から出ることが出来ました。有難うございました。ただMovingWalk様のところにも書いたのですが、Loopが終わらないと出ない・・。STOPButtonを押したらその場でLoopから出るようにするにはどのようにすればいいのでしょうか?すみませんがよろしくお願いします。