今まで使えてたExcelのVBAツールでエラーが起きてしまった場合の対処法

Excel2007とExcel2003以前を共存させている人って結構多いはず。
そういう環境で、今まで使えてたExcelVBAツールを久しぶりに使ってみると、・・・つ、使えない。という時のチェックポイントの1つがこれ。

その他の注意点

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

複数のバージョンの Office がインストールされている場合の Office オートメーションについて | Microsoftサポートオンライン より

すでにどこかで言及されているかもしれないけど、そもそも、この仕様がおかしくないですか?

今回、Excelを使った既存システムがあって、そのシステムを使って作業しようとしたところ同じところで必ずエラー。常々色んなものを起動しっぱなしの環境だったので、メモリ不足かなーって思い、それらをまず終了。でもって再度トライ。と思いきやそれでもエラー。

なんでかなーって思いながら鼻歌を鼻ずさみながら、ちょっと探したらMicrosoftのサイトに関連すると思わしき上記の記事がありました。

僕の環境も、2003と2007が共存してるので、システムのExcelをオートメーションで扱う部分で2007が呼ばれてエラーを起こしているというのは疑う余地もないですね。

コマンドラインから、次みたいに実行すればOKだよってMicrosoftの人が書いてました。

"c:\program files\microsoft office\office\excel.exe" /regserver

これを、僕の環境(Excel2003)に合わせて、

"C:\Program Files\Microsoft Office\OFFICE11\EXCEL.EXE" /regserver

で実行すると、Office2003を設定していますとかなんとかダイアログメッセージが表示されました。とりあえずこれだけで良いみたいですね。

このスイッチは、テストや開発の目的には使用できますが、運用時の手段として使用することはお勧めできません。

何を!

・・・だそうなので、戻すときは、

"C:\Program Files\Microsoft Office\OFFICE12\EXCEL.EXE" /regserver

にするとよろし。

その後、システムを起動して、今までエラーを起こしていた部分の作業を実行してみると・・・やったー、大丈夫みたいです。と、思いきやまた別なエラーが。今度はExcelのせいじゃないと思う。