Excel 2003 VBA プロジェクトで、MSCOMCTL.OCX のコントロールを使用しています。つまり、VBA プロジェクトには System32\MSCOMCTL.OCX への参照があります。
そのプロジェクトを 64 ビット Windows 7 システムの Excel 2003 で開くと、Excel は参照を SysWOW64\MSCOMCTL.OCX (正しい場所) に自動的に変更します。
しかし、そのプロジェクトを 32 ビット Windows XP を使用しているクライアントに送信すると、クライアントのシステムに SysWOW64\MSCOMCTL.OCX が存在しないため、プロジェクトを開くときに問題が発生します。
これまでに思いついた(不十分な)解決策は次のとおりです。
参照をシステム上の正しい場所 (System32\MSCOMCTL.OCX) に手動で変更するようクライアントに指示します。
- これは、次の理由で実際には機能しません。
- Excel 2003 32 ビットでシートを開き、MSCOMCTL への参照が見つからない場合、ライブラリから取得したすべてのコントロール (TreeCtrl など) がフォームから削除されます :-(
- クライアントは手順に苦労しており、かなり面倒です。
- これは、次の理由で実際には機能しません。
- VBA の VBProject.References.AddFromFile/AddFromGuid を使用して参照を自動的に修正します。
- 上記と同じ問題: ワークブックを開くときに VBA のコンパイルが失敗すると、Excel はフォームから見つけられなかったすべてのコントロールを削除します。
- 参照を自動的に追加し (2. のように)、動的バインディングを使用して、実行時に関連するすべてのコントロールを追加します。
- これは実際に機能する可能性がありますが、現在、イベントハンドラーをコントロールにバインドするのに苦労しています(ただし、それは別の質問になります;-)
アプローチ 1. と 2. は実際には何も解決せず、ソリューション 3 は大変な作業です。
どんなアイデアでも大歓迎です。