Office 2016 クイック実行形式 16.0.7341.2032 以降で Microsoft.Vbe.Interop.Forms を参照するプログラムでエラー
こんにちは、Office 開発サポート チームの中村です。
今回の記事では、.NET Framework 上で動作するアプリケーションからの Office オートメーションや VSTO ソリューションで、Microsoft.Vbe.Interop.Forms が参照できないことによってエラーが発生する動作について記載します。
2018/1/26 Update
本問題について修正を公開したため「4. 対処方法」を更新しました。
1. サマリ
Office 2016 クイック実行形式の 16.0.7341.2032 以降のバージョンで、Microsoft.Vbe.Interop.Forms がグローバル アセンブリ キャッシュ (GAC) に登録されなくなりました。この影響で、このバージョン以降の Office 2016 の利用時に、GAC に Microsoft.Vbe.Interop.Forms が存在しない状況が生じる場合があります。
この動作のため、Microsoft.Vbe.Interop.Forms を利用する .NET Framework 上で動作するアプリケーションで PIA 埋め込みを行っていない場合に、この環境では GAC から Microsoft.Vbe.Interop.Forms アセンブリを読み込むことができず、エラーが生じます。
2. 現象詳細
Office PIA (Office プライマリ相互運用アセンブリ) には、ActiveX コントロールへのアクセスに利用する Microsoft.Vbe.Interop.Forms アセンブリ (Microsoft Forms 2.0 Object Library) が用意されています。これを参照する .NET Framework アプリケーションや VSTO ソリューションを、Office 2016 クイック実行版の 16.0.7341.2032 以降のバージョンで利用すると、以下のようなエラーが発生する場合があります。
[caption id="attachment_1095" align="alignnone" width="442"] 図 1. エラー メッセージ[/caption]
この現象が発生する状況には、後述の原因から以下のような特徴があります。
- Office 2016 MSIインストーラー形式や、Office 2013 以前では正常に動作し、Office 2016 クイック実行形式の 16.0.7341.2032 以降の環境でのみエラーが発生する
- 以前から Office 2016 クイック実行形式を利用していたユーザーは最新版に更新しても問題ないが、最近初めて Office 2016 クイック実行形式をインストールしたユーザーだけエラーが発生する
- 以前から Office 2016 クイック実行形式を利用していたユーザーは最新版に更新後もしばらく利用できるが、オンライン修復を行った後エラーが発生するようになる
3. 原因
冒頭で述べた通り、Office 2016 クイック実行形式の 16.0.7341.2032 以降のバージョンでは、Microsoft.Vbe.Interop.Forms は GAC に登録されません。
Office PIA の埋め込み (※1) が行われておらず、かつアセンブリのローカルコピーも行われないよう設定された .NET アプリケーションや VSTO ソリューションを実行すると、アプリケーションは GAC から Office PIA を読み込もうとしますが、上記の環境では Microsoft.Vbe.Interop.Forms が GAC に登録されていないため、アセンブリの読み込みエラーが発生します。
※1 : .NET Framework のバージョンと PIA 埋め込み有無の動作については以前の記事で説明していますので、詳しくはこちらを参照してください。
補足
- アセンブリ自体はインストールされるため、タイプ ライブラリとしての登録は行われます。このため、GAC の仕組みを利用しない VBA などからの参照は可能です。
- Microsoft.Office.Interop.Excel など、その他の Office 2016 で利用できる Office PIA は引き続き GAC に登録されます。
- 以前のバージョンの Office 2016 が既にインストールされている場合、更新や、クイック修復を行っても、既に GAC に存在する Microsoft.Vbe.Interop.Forms はアンインストールされません。ただし、オンライン修復を行うと、最新のバージョンに更新した上で GAC の再登録が行われ、Microsoft.Vbe.Interop.Forms が GAC から削除されます。
- MSI インストーラー形式の Office 2016 では、Microsoft.Vbe.Interop.Forms は GAC に登録され、更新プログラムを適用したり、修復を行っても、Microsoft.Vbe.Interop.Forms が GAC からアンインストールされることはありません。
参考資料) Office のインストール方式とエディションについては以下のブログ記事をご参照ください。
タイトル : クイック実行形式 (C2R) と Windows インストーラー形式 (MSI) を見分ける方法
アドレス : https://blogs.technet.microsoft.com/officesupportjp/2016/09/08/howto_c2r_or_msi
Microsoft.Vbe.Interop.Forms が GAC に存在するかを確認する方法
エクスプローラーやコマンド プロンプトで、%windir%\assembly フォルダを参照します。
[caption id="attachment_1096" align="alignnone" width="824"] 図 2. GAC の確認方法[/caption]
C:\Windows\assembly 内が通常のフォルダ形式で表示される場合は、「GAC_MSIL」 フォルダ配下で「Microsoft.Vbe.Interop.Forms」フォルダを探します。
2018/1/26 Update
4. 対処方法
本現象について修正を行い、以下のバージョン以降で Microsoft.Vbe.Interop.Forms が GAC に登録される動作となります。
OS と Office が同じビット数の環境 : バージョン 1707 (16.0.83xx.xxxx)
64 ビット OS と 32 ビット Office の環境 : バージョン 1712 (16.0.88xx.xxx)
注意
既に Microsoft.Vbe.Interop.Forms が存在しない構成で Office をインストール済みの場合は、更新のみでは GAC への再登録は行われません。クイック修復も同様です。ご面倒ですが、修正の公開後、オンライン修復、または一旦アンインストールして再インストールを行ってください。
修正バージョンの各チャネルへの公開状況は、以下の公開情報をご確認ください。
タイトル : 更新プログラム チャネル リリースのバージョン番号とビルド番号
アドレス : https://support.office.com/ja-jp/article/ae942449-1fca-4484-898b-a933ea23def7
修正適用以外の対処方法
以下の手順で Office 2016 クイック実行形式をインストールすることで、Microsoft.Vbe.Interop.Forms が GAC に登録されたまま Office 2016 最新バージョンを利用できます。
既に本記事の現象に直面している場合は、いったん Office 2016 をアンインストールします。コントロール パネルの [プログラムと機能] から Office 2016 をアンインストールしてください。
Office 展開ツール (ODT) を用いて、16.0.7341.2032 より前のバージョンを指定して Office 2016 をインストールします。ODT の利用方法は以下の公開情報を参照してください。
(この時点で、Microsoft.Vbe.Interop.Forms が GAC に登録されます。)タイトル : Office 2016 展開ツールの概要
アドレス : https://support.office.com/ja-jp/article/bb5b62d9-1168-47e9-9d54-15a958acfcca
Office を最新バージョンに更新します。Office アプリケーションを起動して [ファイル] タブ – [アカウント] – [更新オプション] - [今すぐ更新] からすぐに更新できます。
(GAC に手順 2. でインストールされた Microsoft.Vbe.Interop.Forms は更新時にはアンインストールされないため、Office を更新しても引き続き Microsoft.Vbe.Interop.Forms を GAC から読み込むことができます。)
注意事項
先述の通り、Office のオンライン修復を行うと、Microsoft.Vbe.Interop.Forms が GAC から削除されますので、この操作は行わないようにしてください。
またこの他に、以下のような方法も検討できます。
- Office 2016 クイック実行形式と、MSI インストーラー形式のOffice 2013 以前のバージョンを同一端末上に共存させることができます。このとき、MSI インストーラー形式の Office のインストールによって、GAC に Microsoft.Vbe.Interop.Forms がインストールされます。共存させる MSI インストーラー形式の Office 製品のライセンスが別途必要となりますが、無償で提供している「SharePoint Designer 2013」を利用いただくと、別途ライセンスは不要です。この SharePoint Designer 2013 のインストールでも Microsoft.Vbe.Interop.Forms が GAC にインストールされます。ただし、システム要件として .NET Framework 4.0 がインストールされている必要があります。
タイトル : SharePoint Designer 2013
アドレス : https://www.microsoft.com/ja-jp/download/details.aspx?id=35491
参考) 共存させる製品を選択する場合は、以下の資料で共存がサポートされている組み合わせをご確認ください。
タイトル : 同一コンピューター上に異なるバージョンの Office、Visio、Project をインストールするためのサポート対象シナリオ
アドレス : https://technet.microsoft.com/ja-jp/library/mt712177(v=office.16).aspx
- .NET Framework アプリケーションを変更することが可能な場合は、PIA を埋め込むよう [相互運用型の埋め込み] プロパティを True に設定を変更します。ただし、PIA をソリューションに埋め込むことが可能なのは .NET Framework 4.0 以降ですので、.NET Framework 3.5 以前をターゲットとしている場合は、まずターゲット フレームワークのアップグレードが必要です。
今回の投稿は以上です。
本情報の内容 (添付文書、リンク先などを含む) は、作成日時点でのものであり、予告なく変更される場合があります。