エクセル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 件のコメント:
コメントを投稿