none
ExcelマクロのMicroSoftListViewControlVersion6.0が他のPCで動きません RRS feed

  • 質問

  • ①マクロ作成環境

    Windows7 Pro 64bit

    Excel 2016 64bit

    ②動作しない環境

    Windows7 Pro 64bit

    Excel 2010 64bit

    ListViewにDrag&Dropされたファイルのパスを取得するようなマクロを作成しました。

    しかし、他のPCではListViewの枠は表示されますが、Drag&Dropしても動作しません。

    エラーなどの表示も出ません。

    下記URLを参考にMSCOMCTL.OCXを動作しない環境に入れて参照するようにしましたが変わらず。

    https://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/excel2010%E3%81%A7microsoft-listview-control/f14c11f2-248b-4f67-aa8f-6e4e11a2e49b

    ↑に64bitでは使えないと書いてありますが、マクロ作成したPCでは64bitで動いています。

    マクロ作成PCの参照先を調べたところ、MicrosoftWindowsCommonControls6.0(SP6)の参照先が、

    C:\Windows\system32\MSCOMCTL.OCX

    となっていましたが、ファイルは存在しませんでした。

    他PCで動かす方法が知りたいです。

    上記URLと同じようなことを書いてあるサイトしか見当たらず、

    ここに投稿したしだいです。

    何か分かる方はアドバイスをお願いいたします。


    • 編集済み Akirakira 2018年3月19日 4:15
    2018年3月19日 4:15

回答

  • こんにちは。

    > Application.OperatingSystemプロパティはWindowsの64bit / 32bitを判定するもの(1. 2. or 3.)ですので、判定方法としては不適切です。

    実際に確認してみると分かりますが、OperatingSystemプロパティは、OSが64ビットであってもOfficeが32ビット版であれば「32-bit」(WOW64)を返します。

    実行されているOfficeが32ビット版であるかどうかを判定するだけであれば、OperatingSystemプロパティを見るだけで十分です。
    (逆に、OSが64ビットかどうかの判定には使えません)

    > Regsvr32を使用してmscomctl.ocxを登録したが動かずでした。

    Akirakiraさんの結果を見る限り、OSもOfficeも64ビット版をお使いのようですので、佐祐理さんが仰っているように、Microsoftが64ビット版のコントロールを提供していない以上、64ビット版Officeでは動作できないだろうと思います。

    2018年3月20日 0:33
  • そうしたテクニックの有無を確認することの何が不満なのでしょうか?

    であれば「動作することはない」が回答になります。Microsoft社が32bit版のMSCOMCTL.OCXしか作成しておらず、また64bitプロセスから32bit版DLLを読み込めない以上、64bit版OfficeがMSCOMCTL.OCXを読み込むことは不可能です。

    2018年3月19日 6:47

すべての返信

  • 参照先に書かれている通りでは? 64bit版Windowsでも動作するものの、64bit版Officeでは動作しません。動いていると思い込んでいるのは32bit版Officeなだけでは?

    なお、64 ビット版または 32 ビット版の Office を選択するには32 ビット版を選択する理由に

    代替の 64 ビット版のない 32 ビット版のコントロールを使用している場合。Microsoft Windows コモン コントロール (Mscomctl.ocx、comctl.ocx) や既にあるサード パーティ製の 32 ビット版のコントロールなど、引き続き 32 ビット版の Office で 32 ビット版コントロールを実行できます。

    とそのままズバリの説明がされています。

    2018年3月19日 4:47
  • Officeが64bitであることはバージョン情報から確認しました。
    2018年3月19日 5:10
  • 質問の内容がよくわからないのですが、

    「マイクロソフトコミュニティでも64bitでも動作しないと言われている内容が、64bitでも動作した。だがしかし64bitで動作しない環境があった。動作しないのはなぜか?」というものですよね?

    Microsoft社としても動作しないと言っています。動作しないことに何が不満なのでしょうか?

    2018年3月19日 5:27
  • 64bitで動作したので、他のPCでも同様に動かせる方法があるのではないか?

    あるならば知りたい、動かせたら便利と思ったから投稿しました。

    そうしたテクニックがあるのか、どのような方法なのか知ろうとすることの何が不満なのでしょうか?



    • 編集済み Akirakira 2018年3月19日 6:42
    2018年3月19日 6:09
  • そうしたテクニックの有無を確認することの何が不満なのでしょうか?

    であれば「動作することはない」が回答になります。Microsoft社が32bit版のMSCOMCTL.OCXしか作成しておらず、また64bitプロセスから32bit版DLLを読み込めない以上、64bit版OfficeがMSCOMCTL.OCXを読み込むことは不可能です。

    2018年3月19日 6:47
  • こんにちは。

    64ビット環境下でActiveXコントロールが動作しない問題が発生した場合、手動で登録(Regsvr32)することで、問題が解消する場合がありますが、

    > Officeが64bitであることはバージョン情報から確認しました。

    お使いのOfficeが64ビット版かどうか、Application.OperatingSystemプロパティで今一度確認されてはいかがでしょうか。
    (64ビット版であれば「64-bit」と表示され、32ビット版であれば「32-bit」と表示されます。)
    2018年3月19日 6:57
  • アドバイスありがとうございます。

    私が試したことをしっかり書いていませんでした。

    済みません。

    https://www.microsoft.com/ja-jp/download/details.aspx?id=10019からMicrosoft Visual Basic 6.0 コモン コントロールをインストールしても動かず。

    Regsvr32を使用してmscomctl.ocxを登録したが動かずでした。


    アドバイスの通りマクロが動作する環境でApplication.OperatingSystemを実行した結果、

    Windows(64-bit)NT 6.01と表示されました。

    バージョン情報が間違っているわけでもなさそうです。


    • 編集済み Akirakira 2018年3月19日 7:54
    2018年3月19日 7:38
  • 組み合わせとして

    1. Windows 64bit - Office 64bit
    2. Windows 64bit - Office 32bit
    3. Windows 32bit - Office 32bit

    があります。その上で、質問されているMSCOMCTL.OCXが動作する環境はOffice 32bit(2. and 3.)ですが、Application.OperatingSystemプロパティはWindowsの64bit / 32bitを判定するもの(1. 2. or 3.)ですので、判定方法としては不適切です。

    質問者さんへ:
    MSCOMCTL.OCXが動作している環境で次のプロシージャを定義、実行してみてください。このコードであればOffice 64bit / 32bit(1. or 2. 3.)が判定できます。

    Public Sub VersionTest()
        #If VBA7 Then
        #If Win64 Then
            MsgBox "Office 64bit"
        #Else
            MsgBox "Office 32bit"
        #End If
        #Else
            MsgBox "Old Office 32bit"
        #End If
    End Sub

    2018年3月19日 10:15
  • To:佐祐理さんへ

    アドバイスありがとうございます。

    試した結果、Office 64bitと表示されました。

    なので、組み合わせとしては

    1. Windows 64bit - Office64bit

    となります。

    2018年3月20日 0:07
  • こんにちは。

    > Application.OperatingSystemプロパティはWindowsの64bit / 32bitを判定するもの(1. 2. or 3.)ですので、判定方法としては不適切です。

    実際に確認してみると分かりますが、OperatingSystemプロパティは、OSが64ビットであってもOfficeが32ビット版であれば「32-bit」(WOW64)を返します。

    実行されているOfficeが32ビット版であるかどうかを判定するだけであれば、OperatingSystemプロパティを見るだけで十分です。
    (逆に、OSが64ビットかどうかの判定には使えません)

    > Regsvr32を使用してmscomctl.ocxを登録したが動かずでした。

    Akirakiraさんの結果を見る限り、OSもOfficeも64ビット版をお使いのようですので、佐祐理さんが仰っているように、Microsoftが64ビット版のコントロールを提供していない以上、64ビット版Officeでは動作できないだろうと思います。

    2018年3月20日 0:33
  • Akirakiraさんの結果を見る限り、OSもOfficeも64ビット版をお使いのようですので、佐祐理さんが仰っているように、Microsoftが64ビット版のコントロールを提供していない以上、64ビット版Officeでは動作できないだろうと思います。

    わかりました。

    逆に何故1.Windows 64bit - Office 64bitの環境で動いているのかを調べてみるのが良さそうですね。

    2018年3月20日 0:47
  • 失礼しました。勉強になりましたが、さすがにちょっと紛らわしい判定方法に思います…。
    2018年3月20日 2:02
  • Akirakira さん

    まだ見ておられるかどうかわかりません.

    ついでに,64bitOfficeをインストールしていないので,

    検証もできませんが,以下を試してみてはいかがでしょう?

    現在マクロが動作しているPCのSysWOW64からMSCOMCTL.OCXをコピーする.

    動かしたいPCの同フォルダに貼り付ける.

    regsvr32で登録する.

    MSCOMCTL.OCXは,古いバージョンだと,上手くいかないので,

    今動いているPCの新しいバージョンを利用するといいかもしれません.

    2018年3月29日 9:28