お世話になります。
Excel2016を使用していると、ある時、シートを選択するとまったく反応しなくなり、CPU使用率が50%(実際には49-52%で変動)のままになり固まってしまいます。
環境:
PC: 複数のPCで発生しました。(Lenovo Thinkpad L412, X240)
windows: Windows 7 (他の環境では試していません。※再現性が低いため簡単にはテストできない)
Excel : 2016 最新修正適用済み (他の環境では試していません。※再現性が低いため簡単にはテストできない)
アドイン: XLSTARTに独自のアドインを入れています。
再現性:
再現しようとしても一度も再現することはできません。ただし、日に3-4時間の操作(操作の密度は高くありません)していると2-3回発生する感覚です。
症状:
・発生すると、EXCELが全く反応しなくなります。特徴としては、時計アイコン(くるくる)も表示されないし、ウィンドウタイトルに「応答しません」のメッセージもでません。シートの切り替えも、ブックの切り替えも、VBEも、終了ボタン(画面右上)も、ESCキーも効きません。
・いつ発生するのかわかりません。長時間操作したあとに発生することもあるし、EXCELを起動してすぐに発生することもあります。
・タスクマネージャーでEXCEL32.EXEのCPUが50%前後になります。
・発生すると数分から数十分たってから動作するようになる場合もありますが、多くの場合は、タスクマネージャーでEXCELを終了する以外に方法がありません。
・また、コントロールが戻ってきた場合も、一回発生すると、キーを入力しただけでも、また、CPU 50%の状態にすぐになります。
分析結果:
独自アドインのなかに各ステップをトレースするコードを実装して、どこで問題が発生するのかを記録しました。
すると、DoEventsを行った直後からEXCEL32.EXEがCPU 50%になっていることがわかりました。
ただし、DoEventsを発行すればいつでも発生するわかではありません。DoEventsは、アドインコードのいたるところにありますが、発生する場所は、SelectionChangeイベントで呼ばれた処理の中のように見えますが、定かではありません。(少なくと数回、そこでとまった)。
その部分の前後の処理コードに特に問題はなく、また、通常はなんの問題もなく、動作しています。
発生する際のExcelの使用するメモリーも多いときもあるし、そうでないときもあるので、メモリー使用量とは関係ないようです。
わたくしの経験では、VBAアプリを動作させていて、EXCELが反応しなくなる場合は、VBAの実行コードがループなどで長く処理を占有してしまう場合であるため、少なくとも3秒に1回くらいDoEventsを常に実行しています。今回は、DoEventsを入れることで逆にEXCEL内部でループ状態に入ってしまったように見えます。
もしかすると、アドインにはまったく関係なく、アドインを使用しなくても、なんらかのタイミングでEXCELが50%の状態に陥る問題が潜在的にあるのかも知れません。
EXCELの内部をデバックするわけにもいかず大変困っています。現在、EXCEL2016でこの問題が発生していますが、数か月前までは、EXCEL2013を使用していたのですが、このような現象は一度も経験したことがありません。
皆様の環境、突然EXCELがCPU 50%で止まってしまうことはないでしょうか。
解決のヒントがあれば、アドバイスをどうぞよろしくお願いいたします。