none
ClassFactoryは要求されたクラスを提供できません RRS feed

  • 質問

  • ■実行環境

    Windwos10 Enterprise 2016 LTSB

    Excel2019(32bit)

    ■開発環境

    Windows10 professional

    Excel2013(32bit)

    開発環境では問題なく動作しているのですが、実行環境だと以下エラーが発生します。

    「システムエラーです:&H80040111(-2147221231)ClassFactory は要求されたクラスを提供できません」

    VBAProjectに対して、ユーザフォームを挿入し、WinSockコントロール(mswinsck.ocx)を貼り付けているのですが、どうもこれに問題があるようです。

    ※1.Winsockを貼り付けたユーザフォームを解放すれば本エラーは出ない

    ※2.実行環境でWinsockを貼り付けたユーザフォームを開こうとするとエラーが発生する

    開発環境と実行環境とでWinsockのバージョンが異なっていたので、開発環境のOCXコピーした上でレジストリ登録しても状況は変わりませんでした。

    その他、ネットに記載されていることは大体試してみたのですが、改善されません。

    ・レジストリから解除⇒登録

    ・*.exdファイルの削除

    ・EXCELの更新    など

    VBAプログラムというよりは環境の問題で、こちらに投稿すべきか悩んだのですが、

    もうお手上げ状態で助けていただきたく思っております。

    以上、よろしくお願いいたします。

    2019年10月10日 6:14

回答

  • 検証可能な環境が無いため、どういう手順を踏めば解決できるのかという具体的なアドバイスはできませんが、以下、思いつく範囲で。

    見当違いの内容だったらごめんなさい。

    ① MSWINSCK.OCX は、Windows 10 や Excel 2019 には含まれていなかったはずなので、実行環境に対して、別途インストールが必要です。

    ocx 自体はすでに配置済みとは思いますが、使用許諾契約の有無は確認しておいてください。同ファイルは単体での再頒布が許可されていません。

    ただし、開発環境(Visual Studio 等)を持っている者が、自身が作成したアプリケーションと共に「ランタイム」を再頒布するのであれば許可されています(再頒布可能なファイルの一覧は redist.txt に記載されています)。 それでも、デザインタイムの再頒布は NG ですが。

     

    ② ocx を Excel UserForm 等から利用する場合、コントロールによってはデザインタイム(開発時)ライセンスが要求されることがあります。

    VB6 などのように、コンパイルされた exe として配布する場合には、ランタイム(実行時)ライセンスだけで動作できるのですけれどね。

    私は、MSWinSck.ocx を Office から利用した経験が無いので、Excel からの利用時に開発時ライセンスが要求されるのかどうかは知らないのですが、少なくとも Visual Studio .NET 2002/2003 (の開発環境)においては、レジストリにライセンス情報が登録されている必要がありました。(VB6Controls.reg に記載がある)

    • KB318597: [PRB] Visual Basic 6.0 のコントロールを Visual Studio .NET で使用するとエラーが発生する

     

    ③ ライセンス問題がクリアされていたとしても、"Kill Bit" により、コンポーネントのロードがブロックされることがあります。

    MSWINSCK.OCX の CLSID は "{248DD896-BB45-11CF-9ABC-0080C7E7B78D}" です。いずれかの段階で Kill Bit の影響を受けるようになっているのかもしれません。(自信なし)

    なお、 KB4058123 にはこの CLSID の記載が見当たりませんでしたが、Win10 登場前の 2008 年当時の MS08-070 において言及されていることは確認できました。

    • KB4058123: Office の COM オブジェクトに関するセキュリティ設定
    • MS08-070: マイクロソフト セキュリティ情報 MS08-070 - 緊急

     

    ④ 最近の Office は、クイック実行形式(C2R) と Windows インストーラー形式(MSI)で異なる動作となることがあるそうです。

    今回の要因であるかどうかは分かりませんが、もしも C2R が原因であった場合は、ボリュームライセンス版の MSI に変更する必要が生じるかもしれません。

    2019年10月10日 7:44
  • うろ覚えですが、魔界の仮面弁士さんが触れられているように、ある時期から、MSWINSCK.OCX は KillBit 扱いになっていたはずです。

    以下のレジストリにアクセスして、値を400から0に変えてみてください。

    場所:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{248DD896-BB45-11CF-9ABC-0080C7E7B78D}

    名前:Compatibility Flags

    データ:400 → 0


    • 編集済み minmin312 2019年10月11日 12:39 誤字訂正
    • 回答としてマーク onionsword 2019年10月15日 9:55
    2019年10月10日 8:52

すべての返信

  • 検証可能な環境が無いため、どういう手順を踏めば解決できるのかという具体的なアドバイスはできませんが、以下、思いつく範囲で。

    見当違いの内容だったらごめんなさい。

    ① MSWINSCK.OCX は、Windows 10 や Excel 2019 には含まれていなかったはずなので、実行環境に対して、別途インストールが必要です。

    ocx 自体はすでに配置済みとは思いますが、使用許諾契約の有無は確認しておいてください。同ファイルは単体での再頒布が許可されていません。

    ただし、開発環境(Visual Studio 等)を持っている者が、自身が作成したアプリケーションと共に「ランタイム」を再頒布するのであれば許可されています(再頒布可能なファイルの一覧は redist.txt に記載されています)。 それでも、デザインタイムの再頒布は NG ですが。

     

    ② ocx を Excel UserForm 等から利用する場合、コントロールによってはデザインタイム(開発時)ライセンスが要求されることがあります。

    VB6 などのように、コンパイルされた exe として配布する場合には、ランタイム(実行時)ライセンスだけで動作できるのですけれどね。

    私は、MSWinSck.ocx を Office から利用した経験が無いので、Excel からの利用時に開発時ライセンスが要求されるのかどうかは知らないのですが、少なくとも Visual Studio .NET 2002/2003 (の開発環境)においては、レジストリにライセンス情報が登録されている必要がありました。(VB6Controls.reg に記載がある)

    • KB318597: [PRB] Visual Basic 6.0 のコントロールを Visual Studio .NET で使用するとエラーが発生する

     

    ③ ライセンス問題がクリアされていたとしても、"Kill Bit" により、コンポーネントのロードがブロックされることがあります。

    MSWINSCK.OCX の CLSID は "{248DD896-BB45-11CF-9ABC-0080C7E7B78D}" です。いずれかの段階で Kill Bit の影響を受けるようになっているのかもしれません。(自信なし)

    なお、 KB4058123 にはこの CLSID の記載が見当たりませんでしたが、Win10 登場前の 2008 年当時の MS08-070 において言及されていることは確認できました。

    • KB4058123: Office の COM オブジェクトに関するセキュリティ設定
    • MS08-070: マイクロソフト セキュリティ情報 MS08-070 - 緊急

     

    ④ 最近の Office は、クイック実行形式(C2R) と Windows インストーラー形式(MSI)で異なる動作となることがあるそうです。

    今回の要因であるかどうかは分かりませんが、もしも C2R が原因であった場合は、ボリュームライセンス版の MSI に変更する必要が生じるかもしれません。

    2019年10月10日 7:44
  • うろ覚えですが、魔界の仮面弁士さんが触れられているように、ある時期から、MSWINSCK.OCX は KillBit 扱いになっていたはずです。

    以下のレジストリにアクセスして、値を400から0に変えてみてください。

    場所:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{248DD896-BB45-11CF-9ABC-0080C7E7B78D}

    名前:Compatibility Flags

    データ:400 → 0


    • 編集済み minmin312 2019年10月11日 12:39 誤字訂正
    • 回答としてマーク onionsword 2019年10月15日 9:55
    2019年10月10日 8:52
  • 本件、ご回答ありがとうございます。

    >① MSWINSCK.OCX は、Windows 10 や Excel 2019 には含まれていなかったはずなので、実行環境に対して、別途イン>ストールが必要です。

    VisualStudioは保持しているのですが、上記OCXはVECTORよりVB6ランタイムをダウンロードし、実行PCにインストールしました。

    「デザインタイムはNG」との記載なので、EXCELの開発タブからユーザフォームに対してコントロールを張り付けたりできるので、

    その時点でNGなのでしょうか?

    ライセンスについては別途確認してみます。

    その他記載いただいた内容については、1つずつ確認し、進展があれば報告させていただきます。


    2019年10月11日 9:52
  • 本件について、ライセンス違反となりそうなので、Winsockを利用している部分はソケットクラスを利用して対応するよう変更してみます。

    ご協力いただきありがとうございました。

    2019年10月15日 9:57