QA@IT

ExcelVBAのListViewが読み込めない

4837 PV

目的:
テストPC上のExcelで以下の動作を実現する。
・セルをダブルクリックしたら選択ダイアログを表示する。
・選択ダイアログの項目一覧からクリックで項目を1つ選択する。
・選択ダイアログのOKボタンを押すと、ダブルクリックしたセルに選択項目の内容を自動入力してダイアログを閉じる。

問題:
ExcelVBAで処理を記述し、そのExcelファイルが開発PC上で想定通り動作することを確認した。
しかし同ファイルをテストPCで使用してみたところ、VBAがエラーになって動作しない。
「 はこのマシンでは利用できないため、オブジェクト を読み込めませんでした。」
「コンパイルエラー:プロジェクトまたはライブラリが見つかりません。」

環境:
・開発PC:win7(64bit) + MSCOMCTL.OCX(ver6.1.98.46) + Excel2007, 2013併存
・テストPC:win7(64bit) + MSCOMCTL.OCX(ver6.1.97.86) + Excel2007

試行内容等:
・テストPCで以下を行うと正常動作するようになる。ただしこのような方法でocxを個別に差し替えるのはよろしくないとネット上のあちこちで見かけるため避けたい。
 MSCOMCTL.OCX(ver6.1.97.86)をregsvr32 -u
 MSCOMCTL.OCXファイルをver6.1.98.46に差し替え。
 MSCOMCTL.OCX(ver6.1.98.46)をregsvr32
・更新プログラムKB3096896でver6.1.98.46にできるようだが、インストールできない。
「~をインストールするには、Microsoft Visual Basic 6.0 SP6 がすでにインストールされている必要があります。」
 VB6SP6ランタイムをインストールして再度上記更新プログラムのインストーラを実行しても同じエラーになる。
そもそもインストーラファイル名にx86とあるので32bit用と思われるが、64bitPC用は発見できていない。
・上記更新プログラム以外にMSCOMCTL.OCX(ver6.1.98.46)を導入するインストーラは発見できていない。
・開発PCのMSCOMCTL.OCXをver6.1.97.86に差し替えてListViewコントロールを貼り付け直せばテストPCで動くのでは?と考えたが、差し替えようとしたところ「クラスが登録されていません」のメッセージが表示されるのみで貼り付けできない。
・別処理でVSTOも使用しているため最悪ExcelVBAは無かったことにしてVSTOで処理を作り直す手もあると思うが、不慣れなVBAで記述した処理を初めて使うc#に書き直すのは作業時間増大・バグ多発のリスクが見込まれるため極力避けたい。

以上です。宜しくお願い致します。

  • そもそもMSCOMCTL.OCX(ver6.1.97.86)はどこから入手されたのでしょう?
    開発PCの状態からみるに、Excelでは2007も2013も.46のバージョンではないかと推測されますが
    ちなみに(2007はどうだったかわかりませんが)今のExcelは32ビットと64ビットがあります。デフォルトでは32ビットが入ったと思いますが、確認しておいたほうが良いのでは
    -
  • ああ、バージョンを読み間違えてました98.46と97.86なので、.46のほうが新しいのですね。ということはExcel2013で.46が入るのかな?
    テストPCにも2013もインストールして動くかテストしてみるか、開発PCから2013をアンインストールしてテストしてみてはどうでしょう(こちらはOCX等はきれいに戻るかわかりませんが)
    -
ウォッチ

この質問への回答やコメントをメールでお知らせします。