- ベストアンサー
エクセル2010のコマンドボタンでMouseDownイベントを使用したループ処理がうまくいかない
- エクセル2010のコマンドボタンを使用して、MouseDownイベントでループ処理(Doなど)を行い、MouseUpイベントで処理を停止させるコードを作成しました。しかし、MouseUpイベントまで到達せず、ループが終わらないという問題が発生しています。
- この問題の原因がわからず困っています。何が原因でループが終了せず、処理が中断されないのか、回答をお願いします。
- なお、コードの一部を変更しても問題は解決しませんでした。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じのこーどにしてはどうでしょうか? Dim B As Boolean Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) B = False Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 3 End Select Do DoEvents ’★追加 Range("A1") = Range("A1") + Range("A1") Loop Until B = True ’★追加 End Sub Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) B = True ’★変更 End Sub どうしてもStopで止めたいのであれば、Do Loop間を以下の様にすればよろしいかと思います。 Do DoEvents Range("A1") = Range("A1") + Range("A1") If B = True Then Stop Loop
その他の回答 (1)
- tsubuyuki
- ベストアンサー率45% (699/1545)
止める方法に関しては、1番さんの意見に一票。 ただ、このままだとあっという間ににオーバーフローしますね。 なので、さらに追加を提案です。 Private Sub CommandButton1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single) Dim l As Long '変数lをとりあえず宣言 B = False Select Case Button Case 1 Range("A1") = 1 Case 2 Range("A1") = 3 End Select Do DoEvents Range("A1") = Range("A1") + Range("A1") For l = 0 To 5000 'インターバル("5000"の部分で間隔を調整) DoEvents Next l Loop Until B = True End Sub
お礼
ありがとうございました 解決しました