読者です 読者をやめる 読者になる 読者になる

ぼちぼち書くブログ

日記とかうまいもんとかパソコンのことをマイペースで記します。高知市に住んでいるので地元の情報も投稿します。

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

PC PC-ソフトウェア PC-Windows

以前Microsoft Officeの32bit/64bitの選択で64bitを選ぶと何かとトラブルに遭遇するので重要だという事を記事にしました。

mypace.sasapurin.com

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を使った機能が含まれていた事が原因でした。

support.office.com

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

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

ComCtlの検証

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

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

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

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

f:id:sasapurin:20150526161921p:plain

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

f:id:sasapurin:20150526161949p:plain

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

f:id:sasapurin:20150526162107p:plain

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

f:id:sasapurin:20150526162249p:plain

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

f:id:sasapurin:20150526162834p:plain

そもそもComCtlとは?

という訳で、どれがComCtlに該当するのかはいまだに分からないですが、プログレスバーを表示する機能はこれに該当するんじゃないかと思います。こういう機能が64bit版では使えないとマイクロソフトが公式にアナウンスされています。今回のケースは32bit版Excelを使っている環境で作られたBookなので当たり前に機能の一部として使われたのでしょうが、64bit版Excelでこのブックを開こうとした際に「そんな部品は無い」というエラーが出る訳です。

これで64bit版のExcel(Office)は使わない方が良いという理由がまた一つ増えました。ハッキリ言って一般的なユーザーにとって64bit版Excelを使う意味がありません。

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

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

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

追記

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

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

f:id:sasapurin:20160902165750p:plain

Microsoft Visual Basic for Applications

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

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

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

Office 2013 の記事を読む - ぼちぼち書くブログ

Microsft Office

  • Home and Business
    PowerPointを使用したい人向けのOfficeです。もちろんExcel、Word、Outlookは含まれています。
  • Personal
    Excel、Word、Outlookが使えれば十分だという人向けです。Power Pointを使う可能性のある人はHome and Businessを選んでおいた方が良いでしょう。
Microsoft Office Home and Business 2013 [プロダクトキーのみ] [パッケージ] [Windows版](PC2台/1ライセンス)
 
Microsoft Office Personal 2013 [プロダクトキーのみ] [パッケージ] [Windows版](PC2台/1ライセンス)

Microsoft Office Personal 2013 [プロダクトキーのみ] [パッケージ] [Windows版](PC2台/1ライセンス)

 
Microsoft Office Home and Business 2016(最新)|オンラインコード版|Win対応

Microsoft Office Home and Business 2016(最新)|オンラインコード版|Win対応

 
Microsoft Office Personal 2016(最新)|オンラインコード版|Win対応

Microsoft Office Personal 2016(最新)|オンラインコード版|Win対応

 
Microsoft Office 365 Solo(1年版) 購入特典付き|オンラインコード版|Win/Mac/iPad対応

Microsoft Office 365 Solo(1年版) 購入特典付き|オンラインコード版|Win/Mac/iPad対応

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

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