「はこのマシンでは利用できないため、オブジェクトを読み込めませんでした。」~64bit版Excelで不可解なエラーに遭遇した

PC

以前Microsoft Officeをインストールする際に、32bit/64bitの選択で64bitを選ぶと何かとトラブルに遭遇するので意識してインストールするのが重要だという事を記事にしました。

Windowsも当たり前に64bitで使用する時代になりましたから、Officeもなんの気なしに64bitを選んでしまいますが、Office 2013では不都合が多いので現状は32bitにした方が良いということを記しておきます。その事について更なる事例に遭遇したので私の中では32bit版を選択するのは決定的です。64bit版Excelを使うメリットがある人は現時点ほぼ居ないと思うので素直に32bit版を使うことを推奨しておきます。(学術計算とかやってる人に限定されるでしょう)

Excel 64bit版の罠

VBA(VBE)でコードを書いて作られたエクセルブックを実行しようとして、謎のエラーメッセージに遭遇したという相談を受けました。他のPCではこの不可解なメッセージは表示されずきちんと動くというのです。

f:id:sasapurin:20150526155914p:plain

「はこのマシンでは利用できないため、オブジェクト を読み込めませんでした。」

日本語が不自由過ぎるので意味がわかりません。でもちょっと想像力を働かせると「何らかのオブジェクトを読み込もうとした際に、このマシンで非対応なので利用できないという「何か」がある」のだろうなと分かります。この「何か」が分からないので追求が難しいですが。

事例や情報はネット上にある

嬉しい事に、このエラーメッセージはGoogleで検索すると沢山事例があるので大抵の場合追求して対処する事は可能の様です。いくつかのパターンがある様です。

今回の件は、残念ながらネット上の情報では直接的に解決しませんでした。でも限りなく答えに近いヒントはあったのでそれに気づいた時にExcelが64bit版なのが原因なんじゃないか?という疑問を持てました。

ComCtlが64bit版ではサポートされていない

32 ビット版の Office だけが対応する機能 (64 ビット版の Office にはない機能)

ActiveX コントロール ライブラリ ComCtl
このライブラリには、ソリューションの構築に使用される ActiveX コントロールが含まれており、Microsoft Office プログラムの Access、Excel、および Word で多用されています。

今回遭遇したこのエラーの原因は、64bit版 Excel 2013を使っていた為だとわかりました。確認の為に簡単なサンプルフォームを含むエクセルブックを作って動作検証してみたところ、32bit版のExcelでは動作して、64bit版のExcelでは動作せずこのエラーが再現したのです。

Excel 2010/2007で本格的に作られた高機能なブックに、Excel 2013 64bit版ではサポートされていないComCtlを使った機能が含まれていた事が原因でした。

などと分かった風な表現になっていますが、ComCtlというのが具体的にどれに当たるのかははっきりしません。裏付けをとる為に切り分けていきます。

幸い、エラーで止まった際にVBEのエラー画面でプログレスバーを使おうとしてところが問題っぽいという事が表示されていたので、真っ先にプログレスバーの動作サンプルを動かしてみることにしました。

ComCtlの検証

手っ取り早くプログレスバーを動作させるサンプルはネット上で探すと直ぐに見つかりました。お借りして手早く検証してみます。

TTak’s Office Excel プログレスバー(進行ゲージ)を表示する(EXCEL2010)

XLS形式のファイルをダウンロードさせて頂きました。一箇所だけ修正しないとエラーが出るので「変数iの宣言」を追加して後はそのまま使わせて頂きました。(あとで気づいたのはXLSM形式のページもあるという事)

検証してみたところ32bit版 Excelでは正常にバーが動きます。64bit版 Excelでは先述の通りイタい日本語のメッセージが表示されますし、コンパイルエラーも発生です。エラーの発生パターンを捕まえたのでめちゃ嬉しいです。

f:id:sasapurin:20150526161921p:plain
エラーメッセージが表示された(64bit版)

もう少し突っ込んで調べてみると、フォームに配置されているはずのプログレスバーが無くなっていて、フォーム上にボタンが一つだけしかありません・・この時点で変です。

f:id:sasapurin:20150526161949p:plain
プログレスバーのデザイン画面にはボタンしか表示されない(64bit版)

なるほどそういう仕組みか・・と、コントロールリストを表示させた所、利用可能なコントロールのリスト内に「Microsoft ProgressBar Control」が有りません。Excel起動(読み込み)段階で失敗しているのでこうなって当然なのでしょう。

f:id:sasapurin:20150526162107p:plain
Microsoft ProgressBar Controlが利用可能なコントロールにリストアプされて無い(64bit版)

ちなみにこれが32bit Excelで正常に動いている状態でした。プログレスバー(進捗状況表示)が表示される機能を実現しています。

f:id:sasapurin:20150526162249p:plain
正常なプログレスバー(32bit版)

この機能を使用する為のコントロール(部品)が64bit版のExcelには無いのですが、32bit版Excelでは、利用可能なコントロールのリストに有ります。つまり32bitでしか使えないVBAの機能(部品)なのです。Excelの発したエラーメッセージはそういう意味だったのでしょう。

f:id:sasapurin:20150526162834p:plain
Microsoft ProgressBar Control Version 6.0がある(23bit版)

そもそもComCtlとは?

という訳で、どれがComCtlに該当するのかはいまだに分からないですが、プログレスバーを表示する機能はこれに該当するのは町がないと思われます。こういう機能が64bit版では使えないとマイクロソフトが公式にアナウンスしています。

今回のケースは32bit版Excelを使っている環境で作られたExcel Bookなので当たり前に機能の一部として使われたのでしょうが、64bit版Excelでこのブックを開こうとした際に「そんな部品は無い」というエラーが出てしまっていた訳です。

これで64bit版のExcel(Office)は使わない方が良いという理由がまた一つ増えました。ハッキリ言って一般的なユーザーにとって64bit版Excelを使う意味がありません。過去に作り込んだExcelファイルを持っている人はなおさらです。

当然ながらトラブルを避ける為に64bit版をアンインストールして、32bit版をインストールし直して今回のケースは対処済です。そしてもちろん32bit版Excelをインストールしなおしたら正常に機能しました。

何度も繰り返しになりますが、一般の用途では64bit版のExcelは意味がないと思われます。意識的に64bit版Excelを使用したい場合は、ユーザーが明確に「機能の制限があっても64bitを使う」と意識出来るようにインストーラを工夫して欲しいとマイクロソフトには強く言いたいです(この会社はサポートに要望しても何も変わらないので無意味ですが)。

あいかわらずユーザーに対する配慮が弱いメーカーです。まぁ、お約束の締めになりますが、そのお陰でMS系のエンジニアは飯の種に困らない訳ですが。

追記

新しい事例があったので追記しておきます。

やっぱり32bit版で作成したマクロ入りExcelファイルを64bit版Excel環境で開こうとした時のエラーです。謎なことに64bit版Excel(Office)を指定してインストールなんてしていないのに64bit版でインストールされることが希にある様です。マイクロソフトのバカ野郎と言いたくなります。

Microsoft Visual Basic for Applications

次の非表示モジュール内でコンパイルエラーが発生しました:ダイアログを表示するAPI
このエラーが発生するのは、一般的に、コードがこのアプリケーションのバージョン、プラットフォーム、またはアーキテクチャと互換性がない場合です。このエラーを修正する方法については、[ヘルプ]をクリックしてください。

マイクロソフトのサポート情報は以下の通り。こんなページに誘導されても普通の人間には理解不能です・・

非表示モジュール<モジュール名>内でコンパイルエラーが発生しました,Office Shared [vblr6.chm1040201]

Microsft Office

  • Home and Business
    PowerPointを使用したい人向けのOfficeです。もちろんExcel、Word、Outlookは含まれています。
  • Personal
    Excel、Word、Outlookが使えれば十分だという人向けです。Power Pointを使う可能性のある人はHome and Businessを選んでおいた方が良いでしょう。

MS Officeも変わってきてしまいましたので旧バージョンでの利用は難しくなってきました。今どきのPCならやはり現行バージョンの方が良いでしょうね・・便利になってる風で実はそんなに便利になってないと感じますけど。UIも変更し過ぎだと思うな、個人的には・・

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛
2,530円(11/23 17:02時点)
Amazonの情報を掲載しています

コメント

  1. […] mypace.sasapurin.com […]

  2. […]  ぼちぼち書くブログ「はこのマシンでは利用できないため、オブジェクトを読み込めませんでした。」~6…https://mypace.sasapurin.com/entry/2015-05-26-124400以前Microsoft Officeの32bit/64bitの選択 […]

タイトルとURLをコピーしました