FAQ
エラー:ActiveX DLL、ActiveX コントロール、またはプロパティ ページからこのホスト アプリケーションにモードレスフォームを表示することはできません。
ナレッジ番号:5499 | 登録日:2023/07/27 | 更新日:2024/11/21
- 【エラー・メッセージ】
Visual BasicのActiveX DLLで実装したモードレス・フォームを表示しようとすると以下のエラーが発生する場合があります。
“Non-modal forms cannot be displayed in this host application from an ActiveX DLL, ActiveX Control, or Property Page”
【原因】
ArcGIS 9.xでは、ArcGISアプリケーション起動時にVBAが自動的に初期化されません。
イベントをハンドルするVBAサブルーチン(例えばドキュメント・イベントやUIコントロールに関連付けられたイベント)が
少なくとも1つ存在する場合にのみ初期化されます。
この変更はArcGISのパフォーマンスやリソースの稼働時間を改善するために行われました。
ArcGIS 9.xではエクステンション、ツールバー、ドッカブル・ウィンドウなどは必要なときにのみロードされます。
しかし、ArcGISアプリケーション起動時にVBAの初期化をしないことが
Visual BasicのActiveX DLLで実装したモードレス・フォームが失敗する原因となります。
なぜならモードレス・フォームは、モードレスがサポート可能となるように完全に初期化されるVBAに依存するためです。
VBダイアログがモードレスで表示されるように作られていると、その表示に失敗します。
Microsoft社は、Visual BasicのActiveX DLLで実装したモードレス・フォームは
モードレス表示するために利用すべきではないという既知の問題をドキュメント化しています。
詳細な情報は以下の関連情報に記載されています。VBモードレス・フォームはZオーダーの不適合などの問題も引き起こします。
C++, C#, Delphi, VB.NETなど、別の開発環境で実装したモードレス・フォームはこの問題を引き起こしません。
【解決策】
VBのモードレス・フォームが必要となる可能性があるアプリケーションを起動するときに、
以下のソリューションのいずれかを使用してください。
- 「マイクロソフトサポート技術情報 247791」で提案されているようにモーダル・フォームを使用する。
- VBコードあるいはモードレス・サポートを必要とする部分を、VBAのロードなしでもモードレス・フォームをサポートする別の開発環境に移植する。
- Visual BasicフォームをModelessFrameオブジェクトに変更する。ModelessFrameオブジェクトはArcGIS 9.0で追加され、VBAの初期化を必要としなくともArcGISでモードレス・ウィンドウを実装する方法をVisual Basic開発者に提供し、通常のVBフォームの代わりとなります。ModelessFrameオブジェクトは既存のVBコードから最小限の変更をするだけですむという利点があり、モードレス・フォームのZオーダーも管理できるため、アプリケーションのフォーカスに関して正しい挙動をし、ウィンドウを最小化したり元に戻したりすることもできます。
- レジストリ設定によって起動時にVBAをロードするように強制します。カレント・ユーザのレジストリ・セッティングの値を設定することによってアプリケーションが起動するたびにVBAをロードさせることができます。VBAのロードを強制するために必要となる各ArcGISアプリケーションの以下のREG_DWORDキーを追加してください。
注意:以下に示す方法はOSの本質的な部分に変更を加える処理を含みます。
したがって実行前にOSおよびファイル(レジストリ含む)のバックアップをしておくことをお勧めします。
必要であればコンピュータの知識に詳しい管理者にお願いしてください。米国ESRIおよびESRIジャパン(株)は 以下の操作によって生じたいかなる結果に対しても保証致しません。 したがってお客様ご自身の責任において実行してください。
HKEY_CURRENT_USER\Software\ESRI\ArcMap\Settings\PreloadVBA=1
HKEY_CURRENT_USER\Software\ESRI\ArcCatalog\Settings\PreloadVBA=1
HKEY_CURRENT_USER\Software\ESRI\ArcScene\Settings\PreloadVBA=1
HKEY_CURRENT_USER\Software\ESRI\ArcGlobe\Settings\PreloadVBA=1これはカレント・ユーザの設定であるので、新規ユーザがログインしArcMapを起動した場合、レジストリ・キーは存在せず、VBAはロードされません。PreloadVBAが0である場合、ArcMap起動時にVBAはロードされません。
■関連情報
・ マイクロソフトサポート技術情報 247791
メタデータ
種類
製品