- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでスロットを作る)
VBAでスロットを作る
このQ&Aのポイント
- VBAを使用して簡単なスロットを作成する方法を教えてください。
- スロットを回転させて止めるまではできましたが、メッセージを出す段階でエラーが発生しています。
- なぜエラーが発生するのか、解決方法を教えてください。
- みんなの回答 (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の気をつけなければいけない使い方の例でした。
お礼
お答えいただきありがとうございました。早速やってみたところ上手くいきました。まさか2つ目のボタンが働いたと思いませんでした。