12月の Office 更新プログラムインストール後、VBA でエラーが発生する

Filed under: Microsoft Office ? hebikuzure @ 5:02 PM

2014年12月にリリースされた Office の更新プログラム MS14-082 をインストールした後、例えばマクロが有効な Excel ブックを開いた時に「Microsoft Visual Basic」の実行時エラーダイアログが表示され、シート上に挿入されているコントロールが操作できない状態になる場合があります。

手元ではエラーが発生しなかったので、どのようなエラー ダイアログが出るのか確認したい方は「山市良のえぬなんとかわーるど」の記事を参照してください

この現象は、次のようなシナリオで発生します。

  1. シートにフォームのコントロールを挿入した Excel ブックを作成します
  2. フォームのコントロールが挿入されると、コントロールのモジュール (MSForms、プログラム名としては fm20.dll) が呼び出されます
  3. 次回の挿入に備えてコントロールのモジュールのキャッシュが作成されます。このキャッシュは %temp%\Excel8.0 フォルダーに、拡張子 .exd で作成されます
  4. 更新プログラム MS14-082 をインストールすると、MSForms (fm20.dll) が更新されます。しかし作成済みのフォームのキャッシュは削除も更新もされません
  5. MSForms のコントロールを操作する VBA が呼び出されると、実際のコントロール (更新済み) とキャッシュ (未更新) の間でバージョン不整合となり、エラーが発生します

回避策

コントロールのキャッシュは手動で安全に削除する事ができるので、フォームを利用できる Office アプリケーションをすべて終了してから .exd ファイルを削除すれば、問題は回避できます。以下の手順で削除してください。また更新プログラムのインストール前に事前にこの手順を行っておくことで、エラーの発生を予防できます。

  1. フォームを利用できる Office アプリケーションをすべて終了します。またはコンピューターを一度再起動します
  2. [Win キー] + R で [ファイル名を指定して実行] を呼び出します
  3. [名前] ボックスに %temp% と入力して [OK] をクリックします
  4. %USERPROFILE%\AppData\Local\Temp\ フォルダーが開くので、Excel8.0 フォルダーを探します
  5. 見つかったら Excel8.0 フォルダーを開き、その中のファイルをすべて削除します (Excel8.0 フォルダーごと削除しても問題ありません)

2014 年 12 月の Office の更新後に VBA が使えなくなったら...

最近の Windows Update はいろいろとあれですけど、今月も KB3002339 (Visual Studio 2010 向け)、KB3004394 (Windows 向け)、KB3011970 (Silverlight 向け)、KB2986475 (Exchange 2010 向け)、に問題が出ているようです。今月は Office 向けの以下の更新にもご注意。

Office 2007 だと KB2596927、Office 2010 だと KB2553154、Office 2013 (MSI 版)だと KB2726958。(追記: これは更新プログラムの不具合というわけではないのでアンインストールはちょっと待った

私の場合、Excel 2013 でマクロが有効なワークシート(.xlsm) を開いたところ、右のようなエラーが表示され、シート上のコントロールを操作できない状態に。

古い%USERPROFILE%\AppData\Local\Temp\Excel8.0\MSForms.exd(%TEMP%\\Excel8.0\MSForms.exd)を削除すれば、更新プログラムをアンインストールしなくても問題解消しました。MSForms.exd は、次回 Excel 起動時に自動生成されます。Excel 以外の場合は、.exd の場所やファイル名が違うかもしれません。

参考:
コントロールを挿入すると EXD ファイルが作成されます。 
[URL]  http://support.microsoft.com/kb/199830/ja

この回避方法がすべてに有効かどうかはわかりませんが、更新プログラムのアンインストールなしで問題を解消できてよかった(追記: これは更新プログラムの不具合というわけではなく、Axtive X コントロールのキャッシュである .exd ファイルは、そういう運命にあるようです=過去の更新プログラムでもあったよくあるトラブルみたい)。

12/15 AM 追記) The Microsoft Excel Support Team Blog より、公式(?)な対処方法など。
Form Controls stop working after December 2014 Updates 

12/15 PM 追記) KB も出てた。
"Cannot insert object" error in an ActiveX custom Office solution after you install the MS14-082 security update
[URL] http://support2.microsoft.com/kb/3025036/en-us
1/16 AM 追記) Fix It も出た
 "オブジェクトを挿入できません" エラーが MS14-082 セキュリティ更新プログラムをインストールした後に ActiveX カスタム Office ソリューションで表示される 
[URL] http://support.microsoft.com/kb/3025036/ja

・・・

Office 365 ProPlus などクイック実行 (C2R) 版の場合は、特定の更新プログラムをアンインストールするということができません。ただし、ちょっと前のバージョンに戻すということは可能です。

以下は、その方法。今回の問題とは関係ありませんが、今後のトラブルに備える意味で、クイック実行版 Office ユーザーは知っておいて損はないでしょう。

クイック実行版って何?という方へ。ボリューム ライセンス製品の Office 2013 または MSDN サブスクリプションの Office 2013 は MSI 版です。それ以外はすべて、クイック実行版です(たぶん)。パッケージ製品の Office 2013 や Word 2013 などのアプリケーションはクイック実行版ですし、Office 365 サブスクリプションに付いてくる PC にインストールするやつはクイック実行版です。

クイック実行版の Office 2013/Office 365 アプリケーションは、Windows Update (Microsoft Update) では更新されず、アプリケーションに組み込まれた更新機能で常に最新状態に更新されます。更新されたアプリケーションで問題が発生した場合は、次の方法で古いバージョンに戻すことができます。一般ユーザーの方には、とてもできそうにないので、そんな更新トラブルはもう起こらないことを祈るばかり (7月には起こっちゃったようです)。

クイック実行 (C2R) の Office 2013 も過去の更新バージョンに戻せる (2014/07/28)
How to revert to an earlier version of Office 2013 Click-to-Run
[URL]  http://support.microsoft.com/kb/2770432/

システムの復元がクイック実行の実行環境に悪さをすることもあるみたいですので、こちらもご参考に。一般ユーザーの方は、こうなったらもうワケがワカランでしょうね。

Office 2013 クイック実行の更新を適用後にシステムの復元で更新前に戻すと Office アプリケーションが起動しない 
[URL]  http://support.microsoft.com/kb/2847639/ja






            



-