Excelのコンパイルエラー

先日からExcel 2010のファイルを触っているのですが、この2010はなかなかくせ者でした!

何がくせ者かというとシートなどに「ボタン」や「ドロップダウン」などを配置し、それらを操作したら(例えばボタンをクリックした時など)何か処理をさせるのですが、これが正常に動かない!動かないだけではなく、時には「定義されてない」などのメッセージが出たりします。VBAでコンパイルを行うと

無効なオブジェクトライブラリです。または定義されていないオブジェクトへの参照を含んでいます。

などのメッセージが出てこれまた動かない!

さて、この原因と対策について下記に明記しておきますので、参考になればと思います。

下記に書いてある内容は私がネット上で書かれている内容を見たり、経験したことで書いているので100%の対応じゃないかもしれません。

原因と症状

まず、原因ですが、おそらくOffice 2010のバグかと思います。どのようなときに発生するかというとシート上などにActiveXの部品を挿入した場合です。

リボンの「開発」タブを表示させ、その中の「挿入」で「ActiveX コントロール」のボタン等を配置すると上記のようなエラーや未動作現象などが発生します。

開発タブのActiveX コントロール

開発タブのActiveX コントロール

さらに情報によるとWindows Updateの「KB2553154」が何かしらの悪さをしているようです。このKB2553154はMS14-082のセキュリティ更新プログラムです。詳細は下記を。

[MS14-082] Microsoft Office 2010 セキュリティ更新プログラムについて (2014 年 12 月 9 日)

対策

さて、対策ですが、ネット上では下記の2つの方法が紹介されていました。

  • 上記の更新プログラム「KB2553154」を削除する
  • パソコン内の「*.exd」ファイルを全て削除する

「*.exd」ファイルとは何かというとExcelなどのファイル内にActiveXの部品が貼り付けられるとキャッシュで作られるファイルとのことです。Excelは通常、最新のキャッシュを見にいくはずですが、古いキャッシュを見てしまうようです。作ったときには正常に動いていたのに、しばらくしたらこのような問題が出てきたのは、正にこれかもしれません。

本日実施した Windows Update 後から Excel 2010 の VBA が動作しなくなった – マイクロソフト コミュニティ

しかしながら今回は上記2つの方法は試していません。私のとった方法はActiveXの部品を使わずに「フォームコントロール」の部品で代用して対応しました。できれば一度作った部品を入れ替えるのは結構な労力となるので、避けたいところですが、幸にもそれほど部品を使っていなかったのでフォームコントロールの部品にしました。

ただ、それら部品を入れ替えただけでは上手く動かなかったので、新しいブックを作りそのブックに利用しているシートをコピーしました。その時は各部品はすでにフォームコントロールの部品にしています。その後、エクスポートしたVBAのプログラムをインポートして無事に動くようになりました。

最後に

本当ならこのようなバグのない最新Officeの2016などを使えばいいのかもしれませんが、諸事情により古い2010を使わなければならない場合もあります。仕方がないことなのですが、このような不具合は解消してほしいですね。>マイクロソフトさん

この問題には結構泣かされましたので、同じ様な経験のある人は参考にどうぞ。けど、あくまでも自己責任で!

小さな会社のExcel VBA業務自動化アプリケーション作成・運用ガイド Windows 10、Excel 2016/2013/2010対応 (Small Business Support)

著者/訳者:武藤 玄 早坂 清志 植木 悠二

出版社:翔泳社( 2016-08-20 )

定価:

Amazon価格:¥ 3,024

大型本 ( 296 ページ )

ISBN-10 : 4798145009

ISBN-13 : 9784798145006