2

私はしばらくの間、参照ファイルを外部からロードして無駄にしようとしました。

具体的には、通常 C:\Windows\System32\MSCOMCT2.OCX にある「Microsoft Date and Time Picker Control 6.0(SP4)」をロードしようとしています。

ただし、この要素を含むマクロを実行する一部の人々は、自分の PC にその "MSCOMCT2.OCX" ファイルを持っていないため、MSCOMCT2.OCX を共有の場所に移動し、代わりに共有の場所を使用するコードを参照することにしました (誰でもアクセスできます)

私はそれを試みましたが、別の場所から「ブラウズ」で参照をロードしようとしたときに、それをロードしませんでした.Cですでにそれを持っていたからです..

だから私は大丈夫だと思った... C:\からファイルを削除して、共有ファイルのみを参照できるようにします。- だから私はそれを削除しました。そのため、ワークブックを再度開いて参照を確認します。「Microsoft Windows Common Controls-2.6.0(SP4)」が見つかりません。すばらしいです。そして、共有ドライブから参照して手動で追加します。ただし、それを行うと、「Microsotft Windows Common Controls-2.6.0(SP4)」の2つの参照が追加されます.1つはC:\(そこにはありません)から、1つは共有ドライブからです。

C:\ から自動的に追加された参照

参照も共有ドライブから追加されました

C:\ からのものが常に自動的に選択されます。C:\ のドライブを無効にして、共有ドライブのドライブを有効にしようとすると、[OK] を押したときの状態に自動的に戻ります。両方を有効にしようとすると、参照が重複していると表示され、C:\ からの参照のみが保持されます。

だから..ロードされないように、リストからその C:\ 参照を取り除く方法を知っている人はいますか? どうやらファイル自体を削除してもうまくいきませんでした。最終的に私の目標は、C:\Windows\System32\MSCOMCT2.OCX ファイルを持たない人々が私の Date Picker Tool を使用できるようにすることです。

どうもありがとう!

4

1 に答える 1

6

ActiveX コントロールの参照は、常にGUID ベースです。VB IDE は、便宜上、コンピューターのレジストリにリストされているファイルの現在の場所を表示しますが、それが何を示しているかは問題ではありません。コントロールは、ユーザーのコンピューターに登録された場所から読み込まれます。

これが重要です。ユーザーのコンピューターにコントロールを登録する必要があります。

あなたがやろうとしていることを、私は強く思いとどまらせなければなりません。ネットワーク上の場所から DLL をロードする方法を考え出すことはできるかもしれませんが、Right Thing(TM) を実行することに勝る利点はなく、多くの問題もあります。正しいことは、そのコントロールが必要な場合は、他のすべての人と同じように、アプリケーションに配布して登録する必要があるということです。また、推奨される場所 (System32) にインストールする必要があります。ネットワーク上ではありません。

何が問題になるかの簡単な例を次に示します。ユーザーにアプリを提供すると、ネットワーク上の制御で希望どおりに動作します。次に、ユーザーは、たまたま同じコントロールを必要とする別のアプリケーションをインストールします。アプリのインストーラーは、コントロールがユーザーのコンピューターに既に登録されていることを確認するため、再度追加しようとしません。ただし、この特定のアプリは、ユーザーがネットワークに接続していないときに使用することを目的としています。今、あなたは他の誰かのプログラムを壊しただけです。

VB/VBA アーキテクチャは、XCOPY 展開をサポートすることを意図したものではありませんでした。「マクロ」を展開しようとしているだけの場合、これらの追加の手順は非常に不便であり、面倒です。悲しいことに、それは獣の性質です。申し訳ありません

于 2013-04-05T12:39:49.553 に答える