• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでスロットを作る)

VBAでスロットを作る

このQ&Aのポイント
  • VBAを使用して簡単なスロットを作成する方法を教えてください。
  • スロットを回転させて止めるまではできましたが、メッセージを出す段階でエラーが発生しています。
  • なぜエラーが発生するのか、解決方法を教えてください。

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

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 これって、あるボタンを押したら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の気をつけなければいけない使い方の例でした。

rangeru
質問者

お礼

 お答えいただきありがとうございました。早速やってみたところ上手くいきました。まさか2つ目のボタンが働いたと思いませんでした。