質問: i doevents loop end with msgbox i 'ここが問題 end sub
回答: これって、あるボタンを押したらflgがtrueになって、スロットがぐるぐる回る。もう一度同じボタンを押したらflgがfalseになって、スロットが止まってメッセージを出す、という事でしょう? これではちょっと無理やね。フラグの状態によって分岐させんと。 > なぜできないのか まず、1個目のbutton_click()がflgをtrueに変えてループし、ループの途中で他のメッセージを処理します。 ここで同じボタンを押すと、1個目のbutton_click()がまだ実行途中のまま2個目のbutton_click()が動き始め、flgをfalseに変えます。そして2個目はflgがfalseなのでそのまま(=iが0のまま)ループを1回も実行せずに抜けてmsgboxで「0」を表示して終了します。 その後、doeventsで2個目のbutton_click()が実行され終了されるのを待っていた1個目のbutton_click()に制御が戻り、ループしていた回数だけ変化したiの値がmsgboxによって出てきた訳だ。 修正方法としては・・・・一番簡単なのは、 ----オリジナルソーススタート flg = not flg 'ボタンを使えるようにする ----オリジナルソースエンド これを次のように変えましょう。 ----修正ソーススタート flg = not flg 'ボタンを使えるようにする if not flg then exit sub ' ここに来た時にflgがfalseなら、2個目という事なのでそのまま終了 ----修正ソースエンド 今回はdoeventsの気をつけなければいけない使い方の例でした。