当社の複数のコンピュータで一連のExcelファイルを使用しています。これらのファイルには、mscomct2.ocx
ライブラリのActiveXコントロールオブジェクト(すなわち、MonthView
とDateTimePicker
)の2つのActiveXコントロールオブジェクトを使用するVBAアプリケーションが含まれています。 ActiveXオブジェクトは、UserFormに表示されます。残念ながら、これらのファイルの移植性は非常に特殊な方法で制限されているようです。私は、このようなマシン上でMonthView
を含むExcelファイルを作成し、任意のグループA PC上でそれを扱うことができます:ExcelファイルのActiveXコントロールで、一部のコンピュータで「オブジェクトを読み込めませんでした...」というエラーが表示される
- グループA:
は、マシンの2つのグループがあるように見えます。しかし、グループBのどのマシンでもこのファイルを開こうとすると、オブジェクトがロードされませんでした。このマシンでは使用できないため、エラーです。ただし、グループBマシンで作成された同じActiveXを持つファイルは、Aマシンで正常に動作します。
- グループB:これらのマシンで作成された問題のActiveXを含むファイルは、あらゆる場所(つまり、どのAマシンとBマシン)でも動作します。しかし、前述のように、Bマシンは、Aマシンに保存されたActiveXを持つファイルが開かれたときに、上記のエラーを出します。他の唯一のAのマシンの作業で作成したファイル、どこでも Bの作業で作成されたファイル:一つの文章で
!
ここで奇妙なことは、すべてのマシンがmscomct2.ocx
を登録していることである(再び:私は質問内の任意のマシン上でMonthView
でフォームを作成することができます!)。 .ocx
自体が各マシン上に配置され、レジストリキーのセットがすべて存在します(コントロールクラス、IID、typelib ID ...のCLSID)。さらに、これらのレジストリキーのデータは、AグループマシンとBグループマシン(GUID、ProgID、バージョンなど)で同じに見えます。一部のマシンでは説明文字列(「Microsoft MonthView Control 6.0(SP6)」などの値)に若干の違いがありますが、状況には影響しないようです(Bグループの一部のマシンではこのような説明は異なりますが、 )。
ここに保存されたファイルは、B機に「移植不可能」でありので当然のことながら、マーフィーの法則のおかげで、私はこれらのExcelファイルを編集するために使用するマシンは、グループAに属している...
OSやExcelのバージョンドン」状況に影響を与えるように見える。たとえば、Bマシンの1つはWin 7 64ビット版(Excel 2007)で動作しますが、他のほとんどのグループAおよびBマシンはWin XP Prof(32ビット)SP3で、Excel 2003がインストールされています。だから、OSとExcelのバージョンは互換性に影響を及ぼさず、問題は何とかActiveXと関連しているようです。
私が見つけたAグループとBグループの唯一の違いは、ファイルバージョンがmscomct2.ocx
です。少なくともAマシンのいくつかはバージョン6.1.x.x、グループBは6.0.x.xです。私はそのような違いが問題を引き起こすかどうか分かりません(ActiveXはCOMオブジェクトです。レジストリキーの値、公開されたタイプライブラリ、COMオブジェクト、およびインターフェイスはすべてのケースで同じようです)。それにもかかわらず、私は6.1.x.x ocx
を6.0.x.xのバージョンに置き換えようとしました...そして、より多くの問題に遭遇しました。私がやったことです:
regsvr32 /u mscomct2.ocx
- 6.0.xののファイルでmscomct2.ocx
を置き換え- 正常に完了しますXバージョン
regsvr32 mscomct2.ocx
- 私はMonthView
を含む単一のフォームでExcelファイルを作成しようとしたこれらのステップの後に成功
完成。しかし、フォームにコントロールを配置しようとしたときにエラーのメッセージボックスが表示されました。クラスが登録されていません。これは、コントロールクラス、そのインターフェイス、typelib(はい、私は確かめるためにレジストリをチェックした)登録されているように見える本当に奇妙です。しかし、それでもエラーはそこにありました。
その後、元の6.1.x.xファイルに戻るために、登録解除/置き換え/登録手続きをやり直しました。その結果、元のSNAFUの状況に戻りました。ユーザーフォームにActiveXをインストールして使用することはできますが、グループBのマシンでは、自分のマシンで保存されたファイルに対してエラーが発生しました。
ファイルとActiveXの移植性の問題とocx
の登録の問題が何らかの形で結びついていると私は推測しています。おそらく、私が知らないExcel VBAでActiveXを登録するためのいくつかの追加要件があります...
私が必要とするのは、Excelファイルを他のマシンと互換性のあるActiveXオブジェクトにすることだけです。誰もそれで私を助けることができますか?
私は両方のグループでこのアップデートを試しました - 効果なし –
OK。 1.これはどうですか? http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7474 rel.notesには、それが失敗したcontrolzの6.1バージョンが含まれていると言われています。2.また、6.0ファイル他のOCX「comctl32.ocx」で手順1〜3を繰り返します。 P.S.問題は確かにVB 6.0の時代のDLL地獄です。このスレッドをチェックしてください:http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Problem-with-MSCOMCT2-OCX- MSM-td7308299.html – Soonts
1.私たちのPCにこのアップデートをインストールすることはできません:「Visual Basic 6 Product」がインストールされている必要があります。明らかに、Excelで使用されるVBはカウントされません。私は完全なVS2005がインストールされたマシン(VBを含む)でこのファイルを試しました - 同じもの。あなたの助けをありがとう、ありがとうございます - あなたの懸念のために+1 –