社内の複数のマシンで一連の Excel ファイルを使用しています。mscomct2.ocx
これらのファイルには、ライブラリからのいくつかの ActiveX コントロール オブジェクト (つまり、MonthView
および)を利用する VBA アプリケーションが含まれていますDateTimePicker
。ActiveX オブジェクトは UserForm に表示されます。残念ながら、これらのファイルの移植性は非常に独特な方法で制限されているようです。
マシンには 2 つのグループがあるようです。
- グループ A:そのようなマシンでExcel ファイルを作成し、
MonthView
グループ A の任意の PC で作業できます。しかし、グループ B の任意のマシンでこのファイルを開こうとすると、「このマシンでは利用できないため、オブジェクトを読み込めませんでした」というエラーが発生します。ただし、グループ B マシンで作成された同じ ActiveX を持つファイルは、A マシンで正常に機能します。 - グループ B:これらのマシンで作成された問題の ActiveX を含むファイルは、どこでも (つまり、任意の A および B マシンで) 動作します。しかし、先に述べたように、B マシンは、A マシンに保存された ActiveX を含むファイルを開くと、上記のエラーを返します。
つまり、A マシンで作成されたファイルは他の A マシンでのみ機能し、B マシンで作成されたファイルはどこでも機能します。
ここで最も奇妙なことは、すべてのマシンが登録されていることです (繰り返しになりますが、どのマシンでもmscomct2.ocx
フォームを作成できます!)。それ自体は各マシンに配置され、レジストリ キーのセット全体が存在します (コントロール クラスの CLSID、IID、typelib ID など)。さらに、これらのレジストリ キーのデータは、A グループと B グループのマシンで同じように見えます (GUID、ProgID、バージョンなど)。一部のマシンでは説明文字列 ("Microsoft MonthView Control 6.0 (SP6)" などの値) にわずかな違いがありますが、これは状況に影響を与えないようです (B グループの一部のマシンではそのような説明が異なりますが、それらで作成されたファイルはどこでも機能します) )。MonthView
.ocx
当然、マーフィーの法則のおかげで、これらの Excel ファイルを編集するために使用するマシンはグループ A に属しているため、ここに保存されたファイルは B マシンに「移植できません」...
OS や Excel のバージョンによる影響はないようです。たとえば、B マシンの 1 つは Win 7 64 ビット (Excel 2007) で動作し、他のほとんどのグループ A および B マシンは Excel 2003 がインストールされた Win XP Prof (32 ビット) SP3 です。したがって、OS と Excel のバージョンは互換性に影響を与えず、問題は ActiveX に何らかの形で関連しているようです。
私が見つけた A グループと B グループの ActiveX 関連の唯一の違いは、 のファイル バージョンですmscomct2.ocx
。少なくともいくつかの A マシンはバージョン 6.1.xx を持っていますが、グループ B は 6.0.xx を持っています。このような違いがどのように問題を引き起こすのかわかりません (結局、ActiveX は COM オブジェクトであり、レジストリ キーの値によると、公開されている typelib、com オブジェクト、およびインターフェイスはすべての場合で同じように見えます)。それにもかかわらず、私は 6.1.xx を 6.0.xx バージョンに置き換えようとしましたocx
...そしてさらにトラブルに遭遇しました。私がしたことは次のとおりです。
regsvr32 /u mscomct2.ocx
- 正常に完了しましたmscomct2.ocx
6.0.xx バージョンの with ファイルを置き換えましたregsvr32 mscomct2.ocx
- 正常に完了しました
これらの手順の後、MonthView
. しかし、フォームにコントロールを配置しようとすると、エラーClass not registeredのメッセージ ボックスが表示されます。コントロール クラス、そのインターフェイス、typelib など、すべてが登録されているように見えるため、これは非常に奇妙です (確かにレジストリを確認しました)。しかし、それでもエラーはありました。
その後、登録解除/置換/登録の手順を再度実行して、元の 6.1.xx ファイルに戻りました。これにより、元の SNAFU の状況に戻りました。ユーザー フォームに ActiveX を再度インストールして使用することはできましたが、グループ B のマシンでは、マシンによって保存されたファイルでエラーが発生しました。
ファイルの ActiveX 移植性の問題とocx
登録の問題は何らかの形で関連していると思いますが、どうすればよいかわかりません。おそらく、Excel VBA に ActiveX を登録するための追加要件がいくつかあるのですが、それは私にはわかりません...
必要なのは、他のマシンと互換性のある Excel ファイルに ActiveX オブジェクトを含めることだけです。誰でもそれで私を助けることができますか?