トップ回答者
ExcelマクロのMicroSoftListViewControlVersion6.0が他のPCで動きません

質問
-
①マクロ作成環境
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
回答
-
こんにちは。
> 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では動作できないだろうと思います。- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年3月29日 2:05
-
そうしたテクニックの有無を確認することの何が不満なのでしょうか?
であれば「動作することはない」が回答になります。Microsoft社が32bit版のMSCOMCTL.OCXしか作成しておらず、また64bitプロセスから32bit版DLLを読み込めない以上、64bit版OfficeがMSCOMCTL.OCXを読み込むことは不可能です。
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年3月29日 2:05
すべての返信
-
参照先に書かれている通りでは? 64bit版Windowsでも動作するものの、64bit版Officeでは動作しません。動いていると思い込んでいるのは32bit版Officeなだけでは?
なお、64 ビット版または 32 ビット版の Office を選択するには32 ビット版を選択する理由に
代替の 64 ビット版のない 32 ビット版のコントロールを使用している場合。Microsoft Windows コモン コントロール (Mscomctl.ocx、comctl.ocx) や既にあるサード パーティ製の 32 ビット版のコントロールなど、引き続き 32 ビット版の Office で 32 ビット版コントロールを実行できます。
とそのままズバリの説明がされています。
-
そうしたテクニックの有無を確認することの何が不満なのでしょうか?
であれば「動作することはない」が回答になります。Microsoft社が32bit版のMSCOMCTL.OCXしか作成しておらず、また64bitプロセスから32bit版DLLを読み込めない以上、64bit版OfficeがMSCOMCTL.OCXを読み込むことは不可能です。
- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年3月29日 2:05
-
こんにちは。
64ビット環境下でActiveXコントロールが動作しない問題が発生した場合、手動で登録(Regsvr32)することで、問題が解消する場合がありますが、
> Officeが64bitであることはバージョン情報から確認しました。
お使いのOfficeが64ビット版かどうか、Application.OperatingSystemプロパティで今一度確認されてはいかがでしょうか。
(64ビット版であれば「64-bit」と表示され、32ビット版であれば「32-bit」と表示されます。) -
アドバイスありがとうございます。
私が試したことをしっかり書いていませんでした。
済みません。
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
-
組み合わせとして
- Windows 64bit - Office 64bit
- Windows 64bit - Office 32bit
- 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
-
こんにちは。
> 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では動作できないだろうと思います。- 回答としてマーク 立花楓Microsoft employee, Moderator 2018年3月29日 2:05