数百程度のforループを作成していたところ、時々応答待ち状態で固まってしまう事象に巡り合いました。
今までかなりのループ処理を作ってきましたがこの程度のループ処理で固まってしまうのは初めてでした。
結果から言うと原因は不明でした。
色々調べましたが、
『ループ内にDoEventsを入れて操作を可能にする』
『Application.ScreenUpdating = trueをして表示をしながら実行する』
等が出てくるのですが効果なし。
しかも固まらない時と固まる時があったりとかなり不安定な状態でした。
そして、このようなケースで面倒なのは『応答を待っている時間がもったいない!!!』ということです。デバックにやたらと時間がかかってしまいました。
私の対処としてはApplication.ScreenUpdating = trueは動くようになるのですが処理時間がかなり長くなってしまうので却下。
ループ内にDoEventsを入れるのは元々入っていました。
そこで細かくどこで止まっているかを見ていくとDoEventsの手前で止まっていました。
ん?ひょっとしてDoEventsが原因かと思って外してみたところ固まらなくなりました。
ネット上で情報がないので正しい対処かというと難しいのですが、VBA実行中にループで固まってしまう場合でDoEventsを入れている場合は試してみてはどうでしょうか。
コメント