• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2010のコマンドボタンついて)

エクセル2010のコマンドボタンでMouseDownイベントを使用したループ処理がうまくいかない

このQ&Aのポイント
  • エクセル2010のコマンドボタンを使用して、MouseDownイベントでループ処理(Doなど)を行い、MouseUpイベントで処理を停止させるコードを作成しました。しかし、MouseUpイベントまで到達せず、ループが終わらないという問題が発生しています。
  • この問題の原因がわからず困っています。何が原因でループが終了せず、処理が中断されないのか、回答をお願いします。
  • なお、コードの一部を変更しても問題は解決しませんでした。

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

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

こんな感じのこーどにしてはどうでしょうか? 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

atamanotaisou1
質問者

お礼

ありがとうございました 解決しました

その他の回答 (1)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

止める方法に関しては、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