20241115パソコン備忘録 エクセルマクロの不具合
先日、5年以上使っているエクセルマクロに不具合が出て、その修正の備忘録です。
こちらは、エクセル素人、パソコン素人です。
使っているマクロは、外付けHDDにある別ファイルと交信し、読み書きするマクロです。
(読み書きした状態・状況を本体エクセルにも保存します。)
症状:
マクロが実行されると途中で、エクセルが落ちる。(閉じる)
落ちて、再度、エクセルが復旧する場合もある。
落ちるタイミングは、さまざま気がする。
「オートメーションエラー」とエラーメッセージが出る場合もある。
デバッグを押すと、その箇所が示されるが、数秒で、エクセルが落ちる。(閉じる)
例えば、次の箇所、★
Workbooks.Open Filename:=path_2, ReadOnly:=True '一時的
Set Book1 = Workbooks(data_2) ’★
Book1.Worksheets("list").Activate
一度マウスで触らないと、ステップ実行でいけない、感じになっていました。
ここで、何が悪いのか気づけばよかったのですが・・・。
修正までものすごく時間がかかりました。
やったこと:
(0)自分のPC以外でも試しましたが、問題は起きませんでした。別ネットワークでも試しました。
(1)最初、落ちるタイミングや落ち方、落ちる頻度も違っていた(だんだんひどくなってきた)ので、HDDのせいかなと思いました。
それで、デスクトップにデータを持ってきたりしましたが、改善しませんでした。
実際にHDDを交換したり、ドライブレターを変えたりして、USB挿入口を変えたりしましたが、改善しませんでした。
(2)エクセルアドインの停止。なぜかアドインが入っていたので、削除したりしました。改善しませんでした。
(3)PC本体が弱ったかもと思い、メモリを増加しました。改善しませんでした。
(4)エクセルアプリケーションのせいかと思い、再インストールしました。改善しませんでした。
(5)コードの改修
①DoEvents の追加
②エラーハンドリングを追加して再試行(これは箇所が多すぎたのでやらなかった。)
③その他いろいろ・・・。
(6)で、エクセルマクロのコードをエクスポートし、組み直す。
そこで、気づきました。
外部ファイルの読み込み時に、setやactivate、nothingなどがきちんとしていないコードがある。
(元のコードでもoption explicitもあり、コンパイルエラーもなかったですが。)
そこで、bookを複数扱う箇所には、setやactivate、nothingなどを多めに付けました。
それで動くようになりました。
推測ですが、エクセルの内部の、何かのタイミングが変わり、エクセルの内部処理のタイミングが以前とはずれてしまい、
(シートのactivateとか)今まで何となく正しく動いていたところで、今回不具合が出た気がします。
それを厳密にやったら、正常になった。
もう5年くらい使っていたのに、バグが出るとは。
当時、まったく分かっていなかったなあと振り返りました。
作るのに懸命で、動いたらヨシとしていた。
お金使って部品買ったりしましたが、結局、自分のプログラムの不備でした。
オブジェクト指向をやってきたおかげで少しは、コードを読む能力が上がったかな。
汗。