トップ回答者
Win8(64)のExcel2013(64)でListViewを使いたい

質問
-
Win7(64)のExcel2013(32)でUserFormの上にListViewを配置した簡単な自作xlsmファイルを作成しました。
この環境では問題無くUserFormが表示出来て、その上のListViewにもitemを表示させることが出来ました。
ところが、そのxlsmファイルをWin8(64)のExcel2013(64)で読み込んだらはこのマシンで利用出来ないため、オブジェクト を読み込めませんでした
というエラーダイアログが出て、UserForm上のListViewが勝手に削除されてしまいました。
それで、いろいろ調べていて参照設定を開いてみたら
参照不可:Microsoft Windows Common Controls 6.0(SP6)
場所: C:\Windows\SysWOW64\MSCOMCTL.OCX
となっていました。これはWin7機での設定のようでしたので、これを削除してWin8機で
改めて
Microsoft Windows Common Controls 6.0(SP6)
に参照設定すれば良いと思ったのですが、参照可能なライブラリの一覧の中にこの項目が出てきません。
どうすればWin8(64)のExcel2013(64)でListViewを使う事が出来ますか?
回答
-
64bit 版は提供されていないと思われます。(海外のフォーラムの同種の話)
32bit の Office を使っていただくか、ListView をあきらめるか、あるいは64bit 対応した別のコンポーネントを探すかのいずれかになりそうです。なお、お使いのコントロールはあくまで VB6 向けとして提供されていたものです。
VB6 は 64bit アプリケーションを作れませんので、64bit 向けのコンポーネントは存在しません。
どうしても ListView を狙うのであれば、代替のコントロールを探していただく必要があります。
(見つかったとしても、32bit 向けと64bit 向けで別々の xlsmを用意しないといけないと思います)- 回答としてマーク こびりん 2015年5月1日 3:48
すべての返信
-
64bit 版は提供されていないと思われます。(海外のフォーラムの同種の話)
32bit の Office を使っていただくか、ListView をあきらめるか、あるいは64bit 対応した別のコンポーネントを探すかのいずれかになりそうです。なお、お使いのコントロールはあくまで VB6 向けとして提供されていたものです。
VB6 は 64bit アプリケーションを作れませんので、64bit 向けのコンポーネントは存在しません。
どうしても ListView を狙うのであれば、代替のコントロールを探していただく必要があります。
(見つかったとしても、32bit 向けと64bit 向けで別々の xlsmを用意しないといけないと思います)- 回答としてマーク こびりん 2015年5月1日 3:48
-
皆さん、情報ありがとうございました。
結論としては、Azuleanさんのアドバイスにあるように代替のコントロールを探すしか無いですね。
ListBoxだとWin8(64)Excel2013(64)でも使えたのですが、ちょっと機能不足なのでどうしようかなと思案中です。
ちなみに、
>代替のコントロールを探していただく必要があります。
と言う事ですが、もし何か具体的な心当たりなどありましたら教えて下さい。有料の製品などでそういうものが有るのでしょうか?
少し探してみましたが見つけられませんでした。
それにしても、ListViewのような基本的な機能が64bitでは簡単には使えないというのは、64bit版の普及に悪影響があると思うのですが、マイクロソフトさんとしては32bit版をお勧めしているのでしょうかね。 -
Office 2013 の 64 ビット版をお読みください。その上で64bit版を選択されるのですよね?
-
>代替のコントロールを探していただく必要があります。
申し訳ないですが、候補というものを持っていません。
と言う事ですが、もし何か具体的な心当たりなどありましたら教えて下さい。有料の製品などでそういうものが有るのでしょうか?
あなたが望む要求に合うようなコントロールを探してください。ただ、最近、ActiveX コントロールとして新規に販売されるようなことは少ないか、ないに等しい状況です。
望む解決策が存在しない可能性も視野に入れてください。
あるいは、自分たちで ActiveX コントロールを作るかです。
(ActiveX コントロールの新規開発が少ない理由は、VB.NET や C# は .NET 向けコントロールとして作った方が利便性が高い、VBA ユーザーぐらいになるため、そこまで市場が大きいといえないのだと思います)それにしても、ListViewのような基本的な機能が64bitでは簡単には使えない
VBA の開発環境において、ListView は「基本的な機能」ではありません。
最近の Windows では当たり前のコントロールとなりましたが、昔の VB の開発環境がベースとなっている VBA には標準で組み込まれていません。
たまたま、VB6 向けに提供されたコントロールが使えるに過ぎず、大きな代替わりをしていない VBA では「標準で使えない」とお考えいただいた方が良いでしょう。さて、佐祐理さんも提示されているように、マクロを頑張って作っている企業は 32bit 版を使うことがほぼ前提となっています。
ActiveX コントロールをどうしても使いたいなら、社内など、その閉じた環境の Office を 32bit 版でそろえてください。
それが一番安上がりです。
- 編集済み AzuleanMVP 2015年4月30日 3:17
-
参考までにお聞きしたいのですが、Visual Studio2013を使えば、今回必要なExcel2013(64)で動く
できるとは思います。
ListViewのような機能を持ったActiveX コントロールと言うものを自作する事は可能でしょうか?
ただ、今時、ActiveX コントロールの作り方を説明した書籍はないと思うので、それなりに苦労すると予想しています。
(個人的には Visual Studio 使うなら、この辺 を候補に入れても良いと思います。自分で使った実績がないので感覚を持てていませんが…)
また、先にも書きましたが、作ることができたとして、32bit 向け ActiveX コントロールと 64bit 向け ActiveX コントロールは別物になります。
レジストリ登録が必要なので、クライアントに対してインストーラーも作らないといけません。
マクロではないプログラムの開発経験が十分にあれば苦でもないかもしれませんが、経験がないなら道のりは長いとお考えください。
これまでの「xlsm ファイルを受け渡すだけ済む」といった運用では済まなくなる(インストールが必要)という意味でも、利便性の低下も加味しておく必要があるかもしれません。(ビジネスなら、開発にかかるコストに見合うメリットがほぼないこと(費用対効果)から、まず 32bit Excel 一本化になりそうですが、そうできない理由ある or 学業・研究・趣味(コスト度外視ができる)という理解でよいのですよね?)
- 編集済み AzuleanMVP 2015年4月30日 11:11
-
>学業・研究・趣味(コスト度外視ができる)という理解でよいのですよね?)
はい、そんな感じです。実装コストを気にする必要が無いのであれば、CreateWindowEx API にて "SysListView32" を生成してみては如何でしょう。
たとえばこんな感じ。サンプルなのであまり作りこんではいませんが。
http://www.vb-user.net/junk/replySamples/2015.05.01.18.22/ListView64.zip