無効な前方参照か、コンパイルされていない種類への参照です。

2023年12月30日、Excelファイル(.xlsm)の読み書きで、見たことないエラーメッセージに遭遇。
それがコレ!

朝から晩まで、右往左往、ほぼ1日ハマりました T_T

これは、その解決方法です。

このエラーに遭遇した際、改良していたのはこちらのプログラムから読み取ったマークをExcelへ出力するコードです。もし、よかったらあわせてご参照ください。

自作のマークシートリーダーです。プログラムは上記リンク先から無料でダウンロードできます。単体でも動作しますが、別途組み込みPython環境を追加するとさらに高速動作します。
自作のマークシートリーダーの読み取り速度をPython4Delphiで高速化。組み込み用Pythonのプログラム一式は上記リンク先から無料でダウンロードできます。

【もくじ】

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の名誉のために言うけど、
壊れたんじゃなくて、僕が壊しちゃったんですね・・・

エラーが出るようになった あの時から。

あわててテンプレートから新しくファイルを生成。今までのと入れ替えて書き込んでみると・・・

これはExcelからのメッセージ?

これは僕が用意した書き込み完了のメッセージ。

今日の苦労は、いったい なんだったんだ・・・

IPPEIさん、ほんとに、ほんとに、ありがとー!!

5.まとめ

(1)ソフトウェアはプログラムとデータからできています。
(2)コードの誤りでエラーになることは僕の場合「日常茶飯事」です。
(3)データが壊れても(壊せばもっと確実に)エラーになります。

・総合的に、僕の場合、エラーがでないことのほうが異常でした!!

そぉか、今日はいつも通りの
普通の日だったんだ☆

みなさん、よいお年を!!

6.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。