Excel で VBA プロジェクトを行っている友人がいます。このプロジェクトには、スプレッドシートの使用中にポップアップしてさまざまな機能を実行する多くのフォームがあります。Form_Initialize
それらのいくつかは、既存のものに依存する複雑なメソッドを持っています(プロジェクトが期待どおりに使用されている場合、これは問題ではありません)。
アプリケーション内のすべてのフォームのすべてのコントロールの名前を出力しようとしています。私たちの問題は、VBA.UserForms
コレクションにはすでにインスタンス化されたフォームしか含まれておらず、Form_Initialize
メソッドを実行せずにすべてのフォームをインスタンス化できないことです。
例えば:
For Each f In VBA.UserForms
Debug.Print f.Name
Debug.Print "----------------------"
For Each c In f.Controls
Debug.Print c.Name
Next c
Next f
フォームが使用/ロードされていない場合は何もしません。このコード:
For Each c in frmConfig.Controls
Debug.Print c.Name
Next c
最初に を実行しfrmConfig.Form_Initialize()
、次に名前を出力するフォーム上のコントロールをループします。このフォームが利用可能になる前に発生する必要があることが発生していないため、これはクラッシュします。
フォームをインスタンス化せずに (の実行を回避してfrmConfig.Form_Initialize()
) フォーム上のコントロールの名前を取得することは可能ですか?
どんな助けでも大歓迎です!