Excel VBA ― マクロ実行時に謎のオートメーションエラー“-2147319767”が発生する場合の対処法

どうも、こんばんは。IPPEIです。

最近のExcelは、パワークエリさんのおかげで、一昔前みたいなゴリゴリのVBAを書くことはあまりなくなった。本当にありがたい。パワークエリ使ったことないって? Excelの価値の半分を損しているよ。

そうはいっても、マクロを使う場面も少しはあるのだが、先日謎エラーが発生したので紹介しようと思う。発生したコードの箇所とエラーの内容は次のとおりである。

Worksheets("Sheet1").Select

エラーダイアログの内容: 実行時エラー ‘-2147319767 (80028029)’: オートメーション エラーです。無効な前方参照か、コンパイルされていない種類への参照です。

なんだこれは。僕も見たことのないエラーである。決して難しくないし、エラーになりようがない処理だ。それに、頻繁に使っているマクロだ。Excelを再起動してみたがダメ。PCを再起動してもダメ。シート名を変えてみてもダメだ。

とりあえず、エラー文をそのままググってみたところ、解決策が見つかった。

ブックを新規作成して、全てのシートとマクロをコピーする

このエラーの解決方法は、なんと、ブックを新しく作り直すということである。面倒だが、すべてのシートをコピーして(テーブルやクエリが含まれていると一気にコピーできない!)、もちろん必要なVBAのコードもコピーする。

この方法をとったところ、無事にマクロを実行することができた。何が原因でこのエラーが出るのかは謎でしかないが、何かしらブックが破損してしまったのかもしれない。

今回参考にさせてもらった記事によると、ファイルを保存する時にこのエラーが出ることがあるようで、結構困っている方もいそうである。

もっと簡単な方法があった。「開いて修復する」でファイルを開く

以下、2023年12月の追記です。sagakazu様から大変有益なコメントをいただきましたので、紹介させていただきます。

ファイルを開くダイアログで、ファイルを選択して「開いて修復する」をクリックして開くという方法である。これで修復される可能性があるとのこと。マイクロソフトのサポートサイトにもこの方法が載っている。

あいにく、この記事を書いてから一度も「オートメーションエラー」が発生していないため、この方法で修復できるのか試せていない。この記事をご覧になった方は、まずはこちらのより簡単な方法から試してみていただければいいと思う。それでダメなら、1つめのブックを新規作成する方法でやってみてほしい。

参考記事: Excelファイルが保存できない時に試したい3つの解決法

参考記事: 破損したブックを修復する - Microsoft サポート

買い物しようよ!

コメントを書き込む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメント

  1. おじじ より:

    古いオフィスで読むと開けます。
    エディターを見ても生きているのが分かります。
    理由は分かりません。
    小生の場合、オフィス2010でブックで開きました。
    再保存したら、オフィス365でも無事開けました。(バイナリファイルも、念のため作りました)
    個人的には、オフィス2013までで作成したブックを、オフィス2016以降で改定する場合に起きる感じです。
    複数ブックを開いて操作する時の、Activateに関する認識がシビアになっているとかかなあ。
    実際に、ActiveWindow.ActivateNextで認識させたりとか、VBAも変化していると感じました。
    それと、パワークエリーとか使いません、ADODB.Recordsetdeから、SQL構文を使った方が便利です。

  2. IPPEI より:

    通りすがり様
    コメントありがとうございます。
    たしかにここ数年でトラブルが増えたような気がしますね。

  3. 通りすがり より:

    M365版デスクトップアプリに移行してから、原因不明のマクロ破損が目立つようになってきました。
    マイクロソフトさん勘弁して欲しいです。

  4. IPPEI より:

    松下様
    コメントありがとうございます。無事に解決できたようで何よりです。

  5. 松下 より:

    実行時エラーコードでググったらこちらのサイトにヒットし、開いて修復するを試して見たら本当に解決出来ました。
    助かりました。ありがとうございました。

  6. IPPEI より:

    匿名様
    コメントありがとうございます。お役に立てて大変嬉しく思います。

  7. 匿名 より:

    「実行時エラー 2147319767」で検索したところ、このwebsiteを知り、「開いて修復する」で無事復旧できました。本当に助かりました。ありがとうございました。心より感謝いたします。

  8. IPPEI より:

    Makky様
    心温まるコメントありがとうございます。
    ガジェット関係の記事だけでなく、ご無沙汰になってしまっている「厳選された記事」にふさわしい記事もたまには書かなくてはいけませんね…。
    オートメーションエラーの解決にお役に立てて何よりです。
    今後ともよろしくお願い致します。

  9. Makky より:

    IPPEI様
    突然のオートメーションエラーに焦りましたが、「開いて修復する」で解消しました。
    大変有益な情報をありがとうございます。今後も参考にさせて頂きます。
    ネットには困った側面も多いですが、このような市井の善意に触れる何か嬉しくなりますね。

    見ればPC周りの記事だけでなく、「厳選された記事」に面白そうなタイトルがチラホラ。
    ちょこちょこ読ませてもらおうと思います。

    突然のコメント、失礼しました。

  10. IPPEI より:

    通りすがり様
    お役に立てたようでよかったです。コメントありがとございました。

  11. 通りすがり より:

    全く同じ症状でしたが「開いて修復する」で元通りになりました。時間を取られずに大変助かりました。貴重な情報をありがとうございます。

  12. IPPEI より:

    匿名様
    コメントありがとうございます。お役に立てて何よりです。

  13. 匿名 より:

    >「開いて修復する」でファイルを開く
    これでコンパイルエラー復旧しました。
    今まで手間がかかっていたので、大変助かりました。ありがとうございます。

  14. IPPEI より:

    くぼったー様

    それにしても、どうにも不思議な現象ですね。まあExcelのバグなのかもしれませんが…。
    エラーになりようがない処理ですもんね。どう考えても前者のコードの方がシンプルですし…。
    すっかり忘れていましたが、私も最初にオートメーションエラーに遭遇したのは
    Worksheets("Sheet1").Select
    という、シートを選ぶだけの処理でした。非常に解せません。

    いくつか記事を読んでみると、ループ処理の過負荷や、メモリ不足が原因になる場合もあるようですね。
    新規ブックにコピーした直後は動いても、またそのうち発生するというのは、ブックが肥大化していたり、PCのメモリが足りていないなんてこともあるのかもしれません。
    もちろん、その線はすでに検証されているかもしれませんが…

    ここ数週間、この記事のアクセスが急増しており、困っている方は少なくないのだと思います。
    また何か発見があった際は、当記事にコメントいただき、貴重な情報をご共有いただければありがたいです。

  15. くぼったー より:

    IPPEI 様

    返答ありがとうございます。
    今まで動いていたマクロが止まってしまい、コードの問題を軽視していたため、助言を頼りに色々やってみたところ、絶望的な止まり方をしていたブックは動き出してくれました。

    具体的な下記のようにわざわざactivateさせて動かしたら動いてくれました。
    独学で2年間VBAに触れているだけなので当然の記述方なのかもしてれないのですが、これまではこれで機能してくれていたもので...

    mRow = WB.sheets("○○").Cells(Rows.Count, "C").End(xlUp).Row

    WB.Activate
    sheets("○○").activate
    lastRow = Cells(Rows.Count, "C").End(xlUp).Row

    他のマクロブックはオートメーションエラーで止まってしまったものは新規ブックにコピーで動いてくれていますが、何分頻発しています。
    新規ブックにシートの中身のみコピーするマクロを作成するくらい頻発してます笑

    もし更に行き詰ってしまった際は問い合わせから頼らせていただきます。
    ありがとうございました。

  16. IPPEI より:

    くぼったー様

    コメントありがとうございます。
    エラーが解決しないとのことで心中お察しします。
    私の環境でも、複数人(それぞれ違うバージョンのExcel)で共有しているファイルで発生しました。ただ、新しいブックを作り直すことで解決して、それ以降エラーは起きていません。

    新しいブックを作り直してもダメというのは、具体的にマクロ(コード)に問題がある可能性はないでしょうか?
    原因の切り分けとして、次のようなことを試してみてはいかがでしょうか。
    (1) 他の端末(他のバージョンのExcel)を使ってブックを作り直して実行してみたらどうなるか。
    (2) 複数のマクロがあるなら、新しいブックを作成後、1つずつマクロをコピーして実行していき、原因となっているマクロを特定する。

    くぼったー様の職場のコンプラ的に難しければ仕方ありませんが、実際にエラーが発生しているファイルを見せていただければ、私の方で何か調べることができるかもしれません(解決の可能性は限りなく低いですが…)
    出しゃばりかとは思いますが、お気軽にご連絡ください。
    https://ippeintel.com/contact

  17. くぼったー より:

    コメント失礼します。
    このエラーで悩んでおり、コメントさせていただきました。

    ここ一か月くらいから職場のサーバーに保存しているマクロブック達でこのエラーが頻発するようになってます。
    藁にすがる思いでsagakazu 様の紹介している方法を試してみましたが、だめでした。
    その前に新ブックに作り直してみてもだめでした。
    挙句マクロ動作させた途端にExcelの再起動が始まって白紙のブックが立ち上がってきたり...

    これまで動いてくれていたマクロたちが次々にぶっ壊れていっているので、何か救いが欲しい一か月間です...

  18. IPPEI より:

    sagakazu様
    コメントありがとうございます。
    そして、大変有益な情報をありがとうございます。
    次回トラブルが発生した際は、この方法を試してみようと思います。
    記事にも加筆させていただきます。
    今後ともよろしくお願い致します。