プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (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

この回答への補足

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

補足日時:2003/10/08 20:55
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/09 19:54

#1,5です。

 #6の回答について。

>Public stop_flag As String

stop_flag は、True/False の値を持つ型なので String ではなく
Boolean ですよね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/09 19:52

#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する数字が押した瞬間に止まる)ようになるにはどのようにしたらいいのでしょうか?すみませんがよろしくお願いします。

補足日時:2003/10/08 20:47
    • good
    • 0

#2のtinu2000 です。


maruru01さん、そうでしたそうでした、DoEvents を忘れていました。

質問を見て、瞬間的なイメージは DoEvents はあったんですが、
書いている内に忘れてしまいました。(汗)

maruru01さん、ありがとうございました。
あれではストップボタンが割り込まないですね。

この回答への補足

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

補足日時:2003/10/07 22:45
    • good
    • 0

こんにちは。

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様の補足に抜けられないプログラムを出したのですが、わかりません。すみませんよろしくお願いします。

補足日時:2003/10/07 22:41
    • good
    • 0

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する形のものを中身を変えて出したのですが、どうしても止まりません・・。何がわるいのでしょうか?

補足日時:2003/10/07 22:35
    • good
    • 0

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

    • good
    • 0

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