ピッシーのメモ帳

気になった情報の保管庫

ExcelVBAでシステムエラーが表示された

ExcelVBAでマクロを実行させたとき「システム エラーです:&H80010108(-2147417848) 起動されたオブジェクトはクライアントから切断されました。」というエラーメッセージが表示されたのでメモ。

この画面でOKを押すとメッセージが閉じるが、再度マクロを実行させると今度は「400」とだけ書かれたメッセージが表示された。

一度Excelを閉じて再度開くと、今度はマクロを実行してもエラーメッセージが表示されず勝手にExcelブックが閉じるようになってしまった。

対処方法

標準モジュールを解放し、再度作成する。

エラーメッセージが表示されたマクロは、いずれも標準モジュールに作成している。何らかの原因で標準モジュールが破損したため、正常にマクロが実行できなくなっていたと思われる。

エラーの調査

システムエラーは、シート上に配置されたボタンを押したときに発生した。なので、ボタンに登録されているマクロがエラーの原因と思われる。

このシステムエラーが表示されたExcelファイルには、標準モジュールにMainとCreateSheetの2つのSubプロシージャがある。ボタンに登録しているのはMainプロシージャだが、念のため両方ともプロシージャ単体で実行できるか確認した。いずれもシステムエラーは表示されなかったので、マクロの記述には問題がないことが分かった。

さらに詳しく調べてみると、「マクロの登録」画面でなぜかExcelブック内のプロシージャが表示されないことが分かった。

この画面はボタンにマクロを登録するときに使用するが、通常は以下のようにExcelブックに存在するプロシージャ名が表示される。*1

この内容から、標準モジュールとの接続に問題があるのではないかと考えた。試しに標準モジュールを解放し再度作成したところ、システムエラーは表示されなくなった。

まとめ

システムエラーが出たのは今回が初めてなので、かなり焦った。このエラーが出たのは比較的簡単な処理のマクロだったので、それがまだ救いだった。

標準モジュールが破損した原因はよく分からないが、こういうときのために定期的にバックアップを残しておく必要があるなと思った。

*1:Privateプロシージャの場合はマクロの登録画面には表示されないので注意。