• ベストアンサー

DO~LOOP でのLOOPの抜け方

コマンドボタンを押して(スタートボタン)DO~LOOPで実行しているときにストップコマンドボタンを押してストップさせるときの LOOPの抜け方がわかりません。すみませんがよろしくお願いします。

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

  • ベストアンサー
回答No.6

#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

noname#10506
質問者

お礼

IF文を置く位置が悪かったのがわかりました。わざわざプログラムを書いていただいて有難うございました。

noname#10506
質問者

補足

回答有難うございました。とりあえずLoop地獄から出ることが出来ました。有難うございました。ただMovingWalk様のところにも書いたのですが、Loopが終わらないと出ない・・。STOPButtonを押したらその場でLoopから出るようにするにはどのようにすればいいのでしょうか?すみませんがよろしくお願いします。

その他の回答 (6)

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.7

#1,5です。 #6の回答について。 >Public stop_flag As String stop_flag は、True/False の値を持つ型なので String ではなく Boolean ですよね。

noname#10506
質問者

お礼

わかりました!IF文を置く場所が悪かったのがわかりました。回答有難うございました。

  • MovingWalk
  • ベストアンサー率43% (2233/5098)
回答No.5

#1です。#2の補足について。 If stop_flag = False Then Exit Do  ではなく If stop_flag = true Then Exit Do  でなければ... 念のため、DO の前の行に stop_flag = False をいれておいてください。

noname#10506
質問者

補足

回答有難うございます。とりあえずLoopから出ることが出来ました。有難うございました。ただ、STOPButtonを押せば直ぐに止まらずにLoopから出ないと止まらないんですね・・。(考えてみれば当たり前ですが・・)押したら直ぐにLoopから出られる(Loopする数字が押した瞬間に止まる)ようになるにはどのようにしたらいいのでしょうか?すみませんがよろしくお願いします。

回答No.4

#2のtinu2000 です。 maruru01さん、そうでしたそうでした、DoEvents を忘れていました。 質問を見て、瞬間的なイメージは DoEvents はあったんですが、 書いている内に忘れてしまいました。(汗) maruru01さん、ありがとうございました。 あれではストップボタンが割り込まないですね。

noname#10506
質問者

補足

続きです。すみませんよろしくお願いします。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

こんにちは。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

noname#10506
質問者

補足

回答有難うございます。ただ全然初心者なのでまだ出来ません・・。tinu2000様の補足に抜けられないプログラムを出したのですが、わかりません。すみませんよろしくお願いします。

回答No.2

Private Sub Command1_Click() 'スタートボタン ExitSw = 0 Do  ・・・  If ExitSw = 1 Then Exit Do  ・・・ Loop  ・・・ End Sub Private Sub Command2_Click() 'ストップボタン  ExitSw = 1 End Sub 他にも方法があると思うけど、こんなんでいいんでない?

noname#10506
質問者

補足

回答有難うございます。ただ・・どうしても抜けられません・・。全然初心者なのでまだわかりません。 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)
回答No.1

強制的にループを抜けるには、exit do を使えばいいんじゃないでしょうか?

関連するQ&A

専門家に質問してみよう