(応答なし)無限ループにならないようにする

無限ループになってもコードの一部はExcelの機能で復活します。

でも、コードを書くスピードが落ちるのでVBA.DoEventsを入れましょう。

Windowsというオペレーティングシステムは、メッセージを受け取って処理します。各ウィンドウがメッセージを受け取ります。ループ処理中にDoEventsを入れておくとマウス操作などを受け付けるので「応答なし」状態にならない。

Windowsメッセージは、マウスイベント、キーボード操作です。メッセージ番号は決まっているのでマウスの右か左かは受け取ったアプリ側で判断できます。

VBAの処理は、一行一行処理して途中に余計なWindowsからメッセージで処理手順が狂うといけないので(応答なし)となるのです。Windowsメッセージで受け取らないように以下のコマンドを実行することがある。

Excelにはイベント処理があり、イベントの処理中に同じイベントを受け取ると何度も実行してしまう。これを回避するために維持的にFalseにする。イベント処理の回避が続くとイベントを受け付けなくなるので必ずTrueする。

(Visited 371 times, 1 visits today)
カテゴリー: 6 制御文と条件式  VBA パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です