2023年12月30日、Excelファイル(.xlsm)の読み書きで、見たことないエラーメッセージに遭遇。
それがコレ!
朝から晩まで、右往左往、ほぼ1日ハマりました T_T
これは、その解決方法です。
このエラーに遭遇した際、改良していたのはこちらのプログラムから読み取ったマークをExcelへ出力するコードです。もし、よかったらあわせてご参照ください。
【もくじ】
1.まったく同じコードが動かない!
2.朝からのできごと
3.Web上の情報は?
4.壊れてたのはプログラムじゃなくて・・・
5.まとめ
6.お願いとお断り
1.まったく同じコードが動かない!
Delphiで作成した Excel Book 読み書き練習プログラムでは『何の問題もなく動いたコード』。これを、そのまま本番用プログラムにコピペしたら、なぜか動かない!・・・という、これまでに経験したことのない問題に遭遇しました。
解決するための唯一の手掛かりは、冒頭のエラーメッセージ。
(でも・・・このエラーは、これまでに 一度も見たことない・・・ T_T )
目を皿のようにしてコードを見ても、練習用プログラムと本番用プログラムで、一字一句違ってない。てか、コピペしたんだから、違ってるわけがない・・・。
なのに、練習プログラムは期待通りに動作し、本番用プログラムは絶対に動かない。
必ず、このエラーで停止する・・・
これまで、いろいろなエラーに遭遇したけれど、このエラーは未経験。
もちろん、周囲に頼れる人はいない。自分で何とかするしか、ない。
なんでこんなコトに・・・
2.朝からのできごと
朝、目覚めてからずっと、むかし書いたExcelのマクロ有効Bookを読み書きするDelphiのプログラムを改良してたら、なんかこのエラーが出るようになって・・・。それから、データの書き込みが出来ない!
今、思えば、この時点で気がつくべきことがあったんだけれど、その時の僕は自分で書いたコードの何処かに間違いがあるはずだと思い込んでいるので、その「間違い」をさがすことに夢中になっていて、その他のことはまるで眼中にない。
ってか、Excel関連のプログラムはそこがやっかいなんだけど、大ゴケすると起動したExcelのプロセスが残ってしまい、Ctrl+Alt+Delで残ってるExcelのプロセス探して終了させてって、その繰り返しになってしまう。
この日はエラーの原因がわからなくて、これを際限なく繰り返してしまい、システムも何度か再起動。
で、さんざん頑張って彷徨った挙句、考えたことは・・・
問題の切り分けのため、シンプルなプログラムで実験してみよう!
・・・ということ。
Delphiから接続するExcel Bookはマクロ有効テンプレートにしてあるから、このおおもとのテンプレートをダブルクリックするたびに新しいマクロ有効Excel Book(拡張子はxlsm)が生成される。
そうやって新しいマクロ有効Excel Bookを作成。これを入れる所定のフォルダを作り、保存。準備万端にして、新しい Windows VCLアプリケーションも作成。で、これまで勉強した中で、いちばん動作が確実と思えるコードで「ワークシート間で式をコピーする」手続きを作成、コンパイル、そして「実行」。期待通りに、エラーなく、データのコピー(読み出しと書き込み)終了。胸がすっきり。Bookを開いて結果を確認。データはちゃんと書き込まれ、ワークシートが初期化されてる。もちろん、Excelもきれいに終了。タスクマネージャーで確認してもプロセスは残ってない。
改良中の元のアプリに戻って、新しくボタンを一つ作成。ダブルクリックして新しい手続きを一つ、作り、ここへ、ついさっき動くことを確認したばかりのコードをコピペする。で、実行すると・・・
なんでだよ!!
みたいな・・・
3.Web上の情報は?
もう、こうなったら Googleせんせー に聞きまくるしか、ない。
いくつかのそれらしい情報がヒット。例えば・・・
『sheet名はマクロの実行順に並んでいる必要がある』
(ほんとにー?)
さっそくSheetの順番をそれっぽく入れ替えて実行。結果、変化なし。エラーは普通に出る。
『解決策はモジュール単位の再コンパイル』
(そうなのか?)
ビルドし直しても、変化なし。これも違った。少なくても僕のエラーには効かない。
『あんなことや、そんなことや、こんなことも』全部ダメ。
(マジ、泣きそう T_T )
(このプログラムが動かないと、約束が・・・)
徹底抗戦の覚悟も新たに、腰を据えて、検索結果を、上から順番に、全部開けて熟読。
そしたら次のリンク先ページに、今日一日考えもしなかった情報を発見!
Excel VBA ― マクロ実行時に謎のオートメーションエラー“-2147319767”が発生する場合の対処法
https://ippeintel.com/archives/4644 より引用
解決方法は二つあり、そのひとつは・・・
ブックを新しく作り直す!
これを読んだ僕は、おおきな声で
「あ っ」といいました。
もうひとつは・・・
「開いて修復する」でファイルを開く
とのこと。
4.壊れてたのはプログラムじゃなくて・・・
ファイルだったんですね。
それからExcelの名誉のために言うけど、
壊れたんじゃなくて、僕が壊しちゃったんですね・・・
エラーが出るようになった あの時から。
あわててテンプレートから新しくファイルを生成。今までのと入れ替えて書き込んでみると・・・
今日の苦労は、いったい なんだったんだ・・・
IPPEIさん、ほんとに、ほんとに、ありがとー!!
5.まとめ
(1)ソフトウェアはプログラムとデータからできています。
(2)コードの誤りでエラーになることは僕の場合「日常茶飯事」です。
(3)データが壊れても(壊せばもっと確実に)エラーになります。
・総合的に、僕の場合、エラーがでないことのほうが異常でした!!
そぉか、今日はいつも通りの
普通の日だったんだ☆
みなさん、よいお年を!!
6.お願いとお断り
このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。