パソコン備忘録 エクセルマクロの不具合

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年くらい使っていたのに、バグが出るとは。

当時、まったく分かっていなかったなあと振り返りました。
作るのに懸命で、動いたらヨシとしていた。


お金使って部品買ったりしましたが、結局、自分のプログラムの不備でした。
オブジェクト指向をやってきたおかげで少しは、コードを読む能力が上がったかな。
汗。