2022年11月10日木曜日

”UserForm_Initialize”と”UserForm_Activate”は、”Workbuuk_Open"と”Auto_Open"の相関性に近いものがあると思うな ー ActiveXコントロール(VBA)

    
エクセルVBAの"UserForm"を表示する挙動で、気が付いた点を忘備録します。
それは何かというと、このフォームの表示に使うイベントで、”Initialize”です。

フォーム内の記述で、よく初期化を立ち上げるプロシージャを書くと思います。
このイベントは、表示される前に、コントロールのプロパティを設定しますね。

ただ、正確にはメモリーに展開された後で実行されるので、”Load”が必要です。
ブックを開いたら、何時でもフォームを開けるようにメモリにロードする分け。

Private Sub Workbook_Open()
 Load UserForm1
End Sub

これから、”UserForm1.Show"のコマンドを使ってフォームが表示できるんだ。
シート上のコマンドボタンからでも、ショートカットキーからで呼び出しOK。

この辺の記述は、ネットで散見されるので、敢えて深入りした説明はしません。
むしろ、前述の通り、フォームを表示してくる際のプロパティ設定のお話です。

実は、これには、”UserForm_Initialize”と”UserForm_Activate”があります。
それで、どのようなコード展開で使い分けをするか、適当な説明がありません。

であれば、アメリカ人はどう考えるかと思って、英語でググってみた次第です。
”Difference between UserForm_Initialize and UserForm_Activate"、とね。

すると、使い分けで迷ったアメリカ人もおり、ネットで質問が寄せられていた。
中には、的確な回答を寄せた人もいて、イベントの発生する段階の違いらしい。

先ず、”UserForm_Initialize”は、最初にフォームを開いた時だけ実施します。
この後、”UserForm1.Hide”で隠した後に、再表示しても実施されないんだな。

要するに、日本語の言葉通りに初期化なので、フォームデザインを定義します。
例えば、コンボボックスの選択項目を設定したりしておくのに、良く使います。

Private Sub UserForm_Initialize()
    With ComboBox1
        .AddItem "太郎"
        .AddItem "花子"
        .AddItem "次郎"
        .ListIndex = -1 ’表示する項目で、-1は無し
    End With
End Sub

では、”UserForm_Activate”だと、どんな使い勝手が見いだせるのでしょうか。
この”Activate”は、作動させる意味合いになり、ポイントは起動することです。

例えば、フォームの再表示で初期値の条件が変化している場合が該当するかも。
上の様な選択項目で追加したり削除する条件が生じれば、これを使えるかなあ。

実験しましたが、複雑なコードでなければ、両方ともエラーなしで動きました。
なので、書いたコードの複雑さに応じて、使い分けをすればよいと思いました。

というわけで、ユーザーフォームのイベントは、これだけに止まらないのです。
関連イベントは、”UserForm_Deactivate”とか”UserForm_Terminate”などもありまして、今のところ具体的な使い道のイメージが湧かずにいるのですが、困ったらネットでググって、対応でも工夫してみようかと思った自分なのでした。

おまけ:"UserForm"のイベントリストは、こちらのサイトを参考にしてね。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿