none
Win8(64)のExcel2013(64)でListViewを使いたい RRS feed

  • 質問

  • 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を使う事が出来ますか?

    2015年4月29日 9:25

回答

  • 64bit 版は提供されていないと思われます。(海外のフォーラムの同種の話
    32bit の Office を使っていただくか、ListView をあきらめるか、あるいは64bit 対応した別のコンポーネントを探すかのいずれかになりそうです。

    なお、お使いのコントロールはあくまで VB6 向けとして提供されていたものです。
    VB6 は 64bit アプリケーションを作れませんので、64bit 向けのコンポーネントは存在しません。
    どうしても ListView を狙うのであれば、代替のコントロールを探していただく必要があります。
    (見つかったとしても、32bit 向けと64bit 向けで別々の xlsmを用意しないといけないと思います)

    • 回答としてマーク こびりん 2015年5月1日 3:48
    2015年4月29日 11:33

すべての返信

  • MSCOMCTL.OCXはVisual Basic 6.0で提供されるモジュールですが32bit版しか存在しません。64bit版Excelではどうにもなりません。
    • 回答の候補に設定 佐祐理 2015年5月1日 13:51
    2015年4月29日 11:25
  • 64bit 版は提供されていないと思われます。(海外のフォーラムの同種の話
    32bit の Office を使っていただくか、ListView をあきらめるか、あるいは64bit 対応した別のコンポーネントを探すかのいずれかになりそうです。

    なお、お使いのコントロールはあくまで VB6 向けとして提供されていたものです。
    VB6 は 64bit アプリケーションを作れませんので、64bit 向けのコンポーネントは存在しません。
    どうしても ListView を狙うのであれば、代替のコントロールを探していただく必要があります。
    (見つかったとしても、32bit 向けと64bit 向けで別々の xlsmを用意しないといけないと思います)

    • 回答としてマーク こびりん 2015年5月1日 3:48
    2015年4月29日 11:33
  • 皆さん、情報ありがとうございました。
    結論としては、Azuleanさんのアドバイスにあるように代替のコントロールを探すしか無いですね。
    ListBoxだとWin8(64)Excel2013(64)でも使えたのですが、ちょっと機能不足なのでどうしようかなと思案中です。
    ちなみに、
    >代替のコントロールを探していただく必要があります。
    と言う事ですが、もし何か具体的な心当たりなどありましたら教えて下さい。有料の製品などでそういうものが有るのでしょうか?
    少し探してみましたが見つけられませんでした。
    それにしても、ListViewのような基本的な機能が64bitでは簡単には使えないというのは、64bit版の普及に悪影響があると思うのですが、マイクロソフトさんとしては32bit版をお勧めしているのでしょうかね。
    2015年4月30日 2:58
  • Office 2013 の 64 ビット版をお読みください。その上で64bit版を選択されるのですよね?
    2015年4月30日 3:04
  • >代替のコントロールを探していただく必要があります。
    と言う事ですが、もし何か具体的な心当たりなどありましたら教えて下さい。有料の製品などでそういうものが有るのでしょうか?
    申し訳ないですが、候補というものを持っていません。
    あなたが望む要求に合うようなコントロールを探してください。

    ただ、最近、ActiveX コントロールとして新規に販売されるようなことは少ないか、ないに等しい状況です。
    望む解決策が存在しない可能性も視野に入れてください。
    あるいは、自分たちで ActiveX コントロールを作るかです。
    (ActiveX コントロールの新規開発が少ない理由は、VB.NET や C# は .NET 向けコントロールとして作った方が利便性が高い、VBA ユーザーぐらいになるため、そこまで市場が大きいといえないのだと思います)

    それにしても、ListViewのような基本的な機能が64bitでは簡単には使えない
    VBA の開発環境において、ListView は「基本的な機能」ではありません。
    最近の Windows では当たり前のコントロールとなりましたが、昔の VB の開発環境がベースとなっている VBA には標準で組み込まれていません。
    たまたま、VB6 向けに提供されたコントロールが使えるに過ぎず、大きな代替わりをしていない VBA では「標準で使えない」とお考えいただいた方が良いでしょう。

    さて、佐祐理さんも提示されているように、マクロを頑張って作っている企業は 32bit 版を使うことがほぼ前提となっています。
    ActiveX コントロールをどうしても使いたいなら、社内など、その閉じた環境の Office を 32bit 版でそろえてください。
    それが一番安上がりです。

    2015年4月30日 3:13
  • Azuleanさん
    詳しい解説ありがとうございました。
    Azuleanさんの最初のアドバイスにあるように代替のコントロールや方法を探してみます。
    参考までにお聞きしたいのですが、Visual Studio2013を使えば、今回必要なExcel2013(64)で動く
    ListViewのような機能を持ったActiveX コントロールと言うものを自作する事は可能でしょうか?
    2015年4月30日 10:54
  • 参考までにお聞きしたいのですが、Visual Studio2013を使えば、今回必要なExcel2013(64)で動く
    ListViewのような機能を持ったActiveX コントロールと言うものを自作する事は可能でしょうか?
    できるとは思います。
    ただ、今時、ActiveX コントロールの作り方を説明した書籍はないと思うので、それなりに苦労すると予想しています。
    (個人的には Visual Studio 使うなら、この辺 を候補に入れても良いと思います。自分で使った実績がないので感覚を持てていませんが…)

    また、先にも書きましたが、作ることができたとして、32bit 向け ActiveX コントロールと 64bit 向け ActiveX コントロールは別物になります。
    レジストリ登録が必要なので、クライアントに対してインストーラーも作らないといけません。
    マクロではないプログラムの開発経験が十分にあれば苦でもないかもしれませんが、経験がないなら道のりは長いとお考えください。
    これまでの「xlsm ファイルを受け渡すだけ済む」といった運用では済まなくなる(インストールが必要)という意味でも、利便性の低下も加味しておく必要があるかもしれません。

    (ビジネスなら、開発にかかるコストに見合うメリットがほぼないこと(費用対効果)から、まず 32bit Excel 一本化になりそうですが、そうできない理由ある or 学業・研究・趣味(コスト度外視ができる)という理解でよいのですよね?)

    2015年4月30日 11:06
  • Azuleanさん
    たびたび詳しい解説ありがとうございました。。
    ActiveX コントロールの開発の難しさ、よく理解できました。
    >学業・研究・趣味(コスト度外視ができる)という理解でよいのですよね?)
    はい、そんな感じです。
    2015年5月1日 3:48
  • >学業・研究・趣味(コスト度外視ができる)という理解でよいのですよね?)
    はい、そんな感じです。

    実装コストを気にする必要が無いのであれば、CreateWindowEx API にて "SysListView32" を生成してみては如何でしょう。

    たとえばこんな感じ。サンプルなのであまり作りこんではいませんが。

    http://www.vb-user.net/junk/replySamples/2015.05.01.18.22/ListView64.zip

    2015年5月1日 9:54
  • 魔界の仮面弁士さん
    このたびは、物凄いサンプルプログラムありがとうございました。
    動作確認できました。しかしながら、私には殆ど理解できない関数が沢山登場していて
    何が何だか分りませんが、このサンプルをベースにして理解を深めたいと思います。
    今後、分らない事が有ったら質問させて頂くかもしれませんがよろしくお願いします。
    2015年5月2日 11:07