3

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()) フォーム上のコントロールの名前を取得することは可能ですか?

どんな助けでも大歓迎です!

4

1 に答える 1