2

私の VBA プロジェクトでは、かなり複雑な一連のユーザーフォームを使用しています/使用する予定です。それらの多くは視覚的には同じですが、ボタンに異なるサブルーチンが接続されています。その結果、同じレイアウトから異なる機能を得るためにそれらを複数回複製するという考えにはあまり熱心ではありません。どのサブルーチンがそれを呼び出したかをユーザーフォームに検出させ、これをフロー制御で使用することは可能ですか? 私はこのようなことができるようにしたいと思います:

Private Sub UserForm_Initialize()
    If [the sub that called the userform is called "foo"] then
        Call fooSub
    else
        Call barSub
    End If
End Sub

私のバックアップ計画は、呼び出しサブルーチンにグローバル変数フラグを設定させ、ユーザーフォームにそれをチェックさせることですが、それはかなり粗雑で不器用な解決策のようです。

みんなありがとう、
ルイス

4

3 に答える 3

1

フォームの tag プロパティを使用できます。フォームをロードし、プロパティを設定して、フォームを表示します。

Sub PassCallerToForm()
    Load UserForm1
    UserForm1.Tag = "foo"
    UserForm1.Show
End Sub

プロパティが設定されたので、フォームで何をするかを決定できます。

Private Sub UserForm_Activate()
    If Me.Tag = "foo" Then
        Call fooSub
    Else
        Call barSub
    End If
End Sub
于 2013-06-17T15:18:16.397 に答える