アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBAを使っていて
ListviewなどのMSCOMCTL.OCXに依存した
コントロールを使っている場合
MSCOMCTL.OCXに上位互換性がないため、
VBAを含むxlsmファイルを作成したPCとは異なるPCで
そのプログラムを使用するためには
使うPCごとにMSCOMCTL.OCXをアップデートする必要があります。

http://detail.chiebukuro.yahoo.co.jp/qa/question …

詳細はこのページに書かれてあります。

疑問は、いま、自分が使っているMSCOMCTL.OCXのバージョンが2012年のものなのですが
Windows10にアップグレードするなどした場合に
MSCOMCTL.OCXをアップグレードする必要がありますが
VBAは正常に動作するのでしょうか?

MSCOMCTL.OCXには下位互換性があるのでしょうか?

もし動作しないとして、
一つずつListviewを削除して新規作成するという作業を行う必要があるのでしょうか?
自動更新できる方法があれば教えてください。

質問者からの補足コメント

  • 参照設定って
    「Microsoft ListView Control 6.0(SP4)」か
    「Microsoft Windows Common Controls 6.0(SP6)」などのチェックのことでしょうか?
    mscomctl.ocxのバージョンが異なると
    チェックを入れる項目が変わるということですか?
    例えば、SP6がSP7とか8にする必要があるという意味でしょうか?

    もしそうだとして、
    予め、新しいライブラリの名称さえ分かっていれば
    http://officetanaka.net/excel/vba/tips/tips100.htm

    このページの方法で自動設定することは可能でしょうか?

    あと、バグがあったのは何年と何年のバージョンの間でしょうか?
    2003年辺りですか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/11/13 20:34
  • ご回答ありがとうございます。

    >参照設定は一度行ってしまえば同じ環境であるかぎり一回だけ必要なことでしかない

    というのは、mscomctl.ocxをVBAを作成したPCと同じバージョンと同じに更新した場合ということではなく
    mscomctl.ocxを更新せずに行えるという意味でしょうか?

    例えば、
    週に一度くらいの頻度でWin10で作成したVBAを
    Win7のPCを使っている人に渡したとして
    mscomctl.ocxを更新せずにつかうことはできるのでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2015/11/13 22:57
  • すいません、質問の意図が伝わっていないのですが
    正式な名称が分からないので仮称となりますが
    例えば、
    Win7のPCでは「Microsoft ListView Control 6.0(SP4)」、
    Win10のPCでは「Microsoft ListView Control 7.0(SP6)(仮称)」に登録がなされているとします。

    Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、
    「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。

    しかし、mscomctl.ocxのバージョンを更新しないとWin7 PCには
    「~7.0(SP6)(仮称)」が存在しないのではないでしょうか?

    オフィスを常にアップデートして最新の状態にしておく必要があるということでしょうか?

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/11/14 12:44
  • 納得しました。

    ありがとうございました。

    No.5の回答に寄せられた補足コメントです。 補足日時:2015/11/17 12:15

A 回答 (5件)

>Win10 PCで作成したVBAをWin7 PCにコピーして使用するためには、


>「~7.0(SP6)(仮称)」にチェックを入れる必要があるはずです。
その場合にはWin7PCではMicrosoft ListView Control 6.0(SP4)にチェックを入れなおせば
まず問題ないはずです。
ちなみに当方のWin7 Office2010 のMicrosoft ListView Controlの実体ファイルの
製品バージョンは6.01.9839
Win10 Office2016(プレビュー版)のmscomctl.ocxのバージョンも同一でした。
単純なテストですが、2016 → 2010 では問題なかったです
VBAはよく言えば枯れた状態ですので大々的なアップデートは無いでしょう。
あったとしたらMicrosoft ActiveX Data Object x.x Libraryと同様
Microsoft ListView Control 6.0・・・
Microsoft ListView Control 7.0・・・
のように複数バージョンが並行して登録されるとおもいます。

>オフィスを常にアップデートして最新の状態にしておく必要があるということでしょうか?
大多数の人は更新プログラムを自動的にインストールする設定にしたままだと思います。
最新にというかリビジョンを合わせた方がつまらないトラブルにならないと思います。
ただ、近年のアップデートは地雷が多すぎて何とも言えなくなりました。。。
この回答への補足あり
    • good
    • 0

こんにちは。



Office 2003の時はMSのサポートに出ていましたから、VB6ランタイムはあることは知っていましたが、それ以降も、調べてみたら、バージョンアップしたものがあるようなのですね。ただ、なんだかんだで、わざわざVB6 Runtime をインストールしていました。

それにまつわる話ですが、ListView とかCommonDialog とかいうのなら、VB6 Runtime のことではないでしょうか。個別のコントロールそのものよりも、そのRuntime が、OSをカバーしているか、もしくはセキュリティーを通過するかどうかだと思うのです。

それから、知恵袋のやり取りは変です。MSCOMCTL.OCXの下位のバージョンについては、バージョンが違えば動かないのは当然だと思うのですが、リビジョンとバージョンの話が混同しているようで、リビジョンが違ったら動かないという印象に受け取れますが、そんなことはないはずです。それに、Excel 2003の話です。何か別のトラブルのようです。

それと、今回の話は、以下のような話のことではあるわけです。
http://blog2.k05.biz/2015/06/windows10vb6.html
》Windows 10 Insider Preview版で確認したので、製品版では問題がなくなってるのかもしれません

そこには、動かなくなった場合に対処すればよいだけだと思っています。

>mscomctl.ocxのバージョンを更新しないとWin7 PCには
>「~7.0(SP6)(仮称)」が存在しないのではないでしょうか?
Dao 3.5では、確かに以前から混乱はあったように聞きますが、VB6 Runtime でトラブルがあれば、ダウンロードするしかないと思います。たぶん、そんな問題はないはずですが。

少なくとも、Microsoft ListView Control 6.0 が、7.0になることはありえないにしても、仮にそうだとしたら、そのままではエラーが出て、参照設定を替えるのではなくて、コントロールそのものをすげ替えないといけないでしょうね。そんなことは、考えたくもありませんし、あくまでも仮の話です。

>オフィスを常にアップデートして最新の状態にしておく必要があるということでしょうか?
これはオフィスの話ではなくて、VB6 Runtimeの話です。

http://www.vector.co.jp/soft/win95/util/se123554 …
中身を確認してみないと何とも言えませんが、Win10 には対応しているようですね。

「VB6ランタイムはWindows 10でもサポートされる 」
http://developers.srad.jp/story/15/07/06/0917202/

ただ、私は、まず、現行のランタイムがWin10で動くかどうかをチェックした方がよいと思うのです。現行で動くなら、わざわざ先走る必要などはないと思っています。

それと、ActiveX コントロールは、結果的には参照設定がつきますが、参照設定ではなく、実際に、ツール側で、ActiveXコントロールを呼び出して、使ってみるまで、エラーが発生するかどうかを、動作検証するしか方法はないと思います。

私の経験も含めて、
http://oshiete.goo.ne.jp/qa/8458426.html
にあるように、「サブジェクトは指定された動作に対して信頼されていません」ということもあります。こうなってしまうと、ふつうは諦めざるを得ないのです。

むろん、ご質問者さんのご心配なるように、OSによって動かないというのはあり得る話です。
>一つずつListviewを削除して新規作成するという作業を行う必要があるのでしょうか?
>自動更新できる方法があれば教えてください。

よほど何かトラブルがなければ、Listviewを削除して新規作成ということにはなりませんせんが、Runtime の更新は必要になるでしょう。

>週に一度くらいの頻度でWin10で作成したVBAを
>Win7のPCを使っている人に渡したとして

この場合は、アプリが下位互換とは言わないと思います。リビジョンの違いはあったとしても、同じバージョンなら、使えないはずはないと思います。

ここの資料は、圧巻です。
http://homepage2.nifty.com/nonnon/Chinamini/2010 …

それから、
>MS社のセキュリティアップデートにバグ
すでに回答はついていますが、それとは違って、2014年の12.10 Office Update事件(w)と違うのでしょうか?他は忘れても、これは忘れませんです。みんな、大混乱してしまいました。
    • good
    • 0

mscomctl.ocx自体はWindowsではなくてOffice製品に付属します。


古いバージョンのExcelでVBAが問題なく機能するためには参照設定の変更が必要です。
(2016→2010での確認)
古いバージョンで作成後に新バージョンで使用する際には必要ありません。
mscomctl.ocxのバージョンを新旧で合わせる必要はありません。

質問の意味を取り違えているかもしれませんが
Win10 & Excel2016 にあるmscomctl.ocxをWin7 & Excel2010 にコピペして・・・
という考えでしたら、
まずライセンス違反、
多分レジストリの登録のやり直しが必要、
また、今後にExcel2010上でmscomctl.ocxのセキュリティアップデートがあった場合に厄介なことになりそうです。

Excelのバージョン(アップデートも適用されている)が同じなら
Win10⇔Win7間のやり取りなら参照設定のチェックをせずとも動くハズです。(未検証)
この回答への補足あり
    • good
    • 0

参照設定の一覧で『参照不可』になっていることで確認します。


[レ]参照不可 Microsoft Windows Common Controls 6.0(SP6)となります。
↑チェックを外して一覧から探し出してチェックを入れなおすか
ファイル名はわかっているので[参照(B)]から
C:\windows\SysWow64\mscomctl.ocx を指定します。

Excel2002以降ではセキュリティ上の観点からVBAのオブジェクトへVBAを用いてアクセスするには
セキュリティセンターのマクロの設定で、
『VBA プロジェクト オブジェクト モデルへのアクセスを信頼する』にチェックが必要になりました。
(Excel2010の場合です。他のバージョンでも同様な設定項目があるかと思います)

で、OfficeTanakaさんのところにも書いてあるように「参照不可」になっている場合は
VBAでチェックを外すことは出来なさそうです。
Excel2002の時に色々試したりGoogleったりしましたが解決できませんでした。
参照設定は一度行ってしまえば同じ環境であるかぎり一回だけ必要なことでしかないので
それ以降考えたことはありません。

あの問題は、2012年の夏のことでしたね。
http://answers.microsoft.com/ja-jp/office/forum/ …
この回答への補足あり
    • good
    • 0

現、Windows7 & Excel2010



新、Windows10 & Excel2016
などの場合には完全にとは言えないかもしれませんが、
ほとんどの場合でExcel内部で自動的に判断されるので問題ありません。

逆に、
現、Windows7 & Excel2010

新、Windows10 & Excel2016で作成
のように旧バージョンで動かそうとすると
VBEの参照設定を変更しなくてはいけない場合が多くなりますが
Listviewコントロール自体の作り直しが必要になることは、まず無いと思います。

リンク先の投稿ですが、あの時には、MS社のセキュリティアップデートにバグがあり
MS社の修正パッチの公開を待っていたら業務が滞るので手作業でファイルの置き換え、
レジストリの書き換え、コントロールの作り直しで対応していました。
通常であれば必要のない作業でした。
その後、修正パッチが公開されてあの問題は収束しました。

繰り返しになりますが、mscomctl.ocxに限定でいうと、
新バージョンに移行する場合には何も気を配る必要はないでしょう。
旧バージョンのExcel環境で使えるようにするには、
参照設定の確認が必要です。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています