Excel 2003 と Excel 2007 を共存させる場合の留意点

お仕事で扱うデータのカラム数やレコード数がどうにも Excel 2003 で扱える範囲を超えるものが増えてきました。Excel 2003 以前のバージョンでは 256 カラム × 65536 行までのデータしか扱えない仕様がなんとも重くのしかかってきます。ってことで、Office 2007 を購入して Excel 2007 をインストールしました。今までは部内の数名を人柱にして、Excel 2003 を Excel 2007 にアップグレードしてもらって、なんとなーく不都合でてるなー程度に思っていたのですが、いざ自分がインストールする場面になるとニヤニヤ眺めているだけでは逝かなくなりました。

なんといっても Excel 2003 と Excel 2007 は VBA の動作が何ともしがたいほど違ってます。2003 で動いていた VBA ツールが 2007 では動作しないなんてざらです。いや、ほとんどが現状動いていない。

というわけで、仕方なく Excel 2003 環境と共存して 2007 をインストールする方法を取らざるを得ないです。一応共存インストールオプションがあります。

- スポンサーリンク -

excel2007_02.jpgexcel2007_03.jpg

デフォルトのアップグレードをしてしまうと、旧バージョンの Office をすべて削除して上書きされます。インストール済みの Office アプリケーションを残す場合は、「ユーザ設定」→「削除するアプリケーションを指定する」で、削除しない Office アプリケーションを選択してアップグレードします。この設定は、2007 の初回インストール時にのみ有効なので注意が必要です。

さて、問題はここから。

どうやら Office 製品は共存インストールしたとしても、最後にインストールしたバージョンが優先的に扱われるんです。たとえば、ファイルの関連づけで .xls が Microsoft Office Excel に関連づけられていても起動するのは Excel 2007 で、

excel2007_01.jpg

参照ボタンから Office11\Excel.exe つまり excel 2003 を指定しても関連づけを変更できません。
その他、スクリプトとかで Office OLE オブジェクトを生成するときもわざわざバージョンを指定しても全く無視されて、2007 が起動してきやがる。

Set excel = CreateObject("Excel.Application.11");   // VBA
とか
var excel = new ActiveXObject("Excel.Application.11");  //JavaScript + ActiveX

いろいろ調べていたら、Microsoft のサイトに情報がありました。[INFO] 複数のバージョンの Office がインストールされている場合の Office オートメーションについて

まずは結論から。Excel 2003 を優先的に扱いたいのであれば、以下のコマンドを DOS シェルから実行する。

"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver

逆に Excel 2007 優先に再度変更したくなったら

"C:\Program Files\Microsoft Office\OFFICE12\excel.exe" /regserver

を実行すればOKです。インストール CD が求められますが、これで勝手に上書きされたレジストリを強制的に指定のバージョンで上書きすることが可能です。

最後に、なんでこんな事になるのか MS のサイト情報を引用しておきます。絶対設計がおかしいよ!

概要

この資料では、Office オートメーションを使用する際に、読み込まれる Office アプリケーションのバージョンを COM (Component Object Model) が判断する方法について説明します。

詳細

COM サーバーが初めてインストールまたは登録される際、サーバーのプログラム識別子 (PROGID) およびクラス識別子 (CLSID) に対応するエントリがレジストリに追加されます。これらのレジストリ設定によって、COM は、サーバーのインストール場所などのサーバーに関する情報を取得でき、サーバーの自動化が可能になります。たとえば、Excel 2000 には Excel.Application というバージョン固有の PROGID と {00024500-0000-0000-C000-000000000046} という CLSID があります。Excel 2000 には、次の COM 関連のレジストリ エントリがあります。
 HKEY_CLASSES_ROOT\Excel.Application\CLSID
 デフォルト値 : {00024500-0000-0000-C000-000000000046}
 HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer32
 デフォルト値 : C:\PROGRA~1\MICROS~1\Office\EXCEL.EXE /automation
COM は、PROGID から CLSID までのレジストリ キーの値によって Excel の実行可能ファイルのインストール場所を確認し、そのファイルでオートメーションを開始できます。
複数バージョンの Office をインストールしており、それらの Office サーバーのいずれかでオートメーションを使用する場合、読み込まれるバージョンは、レジストリ内のこれらの設定によって決まります。ほとんどの場合、最後にインストールされたバージョンが、オートメーションで読み込まれるバージョンです。ただし、Word の動作は他の Office アプリケーションとは異なります。それぞれの Office オートメーション サーバーの動作の違いについて、以下に説明します。

Access、Excel、および PowerPoint の 97、2000、および 2003

Access、Excel、および PowerPoint では、Office セットアップ中にこれらのレジストリ キーが変更されます。これらのアプリケーションのいずれかを自動化する際に読み込まれるバージョンは、最後にインストールされたバージョンです。

Word 97

Word 97 では、Office セットアップ中にこれらのレジストリ キーが変更されます。Word を自動化する際に Word 2000 または Word 2002 のいずれかがインストールされていると、Word 97 が読み込まれるのは、このバージョンが最後にインストールされた場合だけです。

Word 2000、2002、および 2003

Word 2000、2002、および 2003 では、Office セットアップ中だけでなく Word が起動されるたびにこれらのレジストリ キーが変更されます。Word を自動化する際に読み込まれるバージョンは、最後に起動されたバージョンまたは最後にインストールされたバージョンです。

その他の注意点

システムに複数バージョンの Office をインストールしているときの Office オートメーションは、一般的にバージョン固有の特定の PROGID を使用して読み込むバージョンを指定できると認識されていますが (たとえば、"Excel.Application.9" の場合は Excel 2000、"Excel.Application.10" の場合は Excel 2002、"Excel.Application.11" の場合は Office Excel 2003 を読み込む)、これは正しくありません。Excel 2000、2002、および 2003 は同一の CLSID を共有しているため、これらの PROGID を使用して読み込まれるバージョンは、単に、どのバージョンが最後にインストールされたかということで決まります。
- スポンサーリンク -