ユーザーフォーム 第3回 ラベル

ユーザーフォーム

プロパティを設定する方法(ラベル)

 今回は前回のプログラムにラベルを追加します。ラベルとは、フォーム上に配置する文字列の事です。ラベルの文字列の設定(プロパティ値)をプロジェクトウインドウとプログラムで変更する方法を学びます。

 プログラムは前回の物をそのまま使用します。

フォームにラベルを配置

 フォームにラベルを配置するにはツールボックスを使います。ボタンの配置と同じです。

 ボタンと同様にオブジェクト名とキャプション名を変更できます。ラベルの場合はキャプション名が主役になります。

 オブジェクト名に関しては、今回は変更せずに使います。(Label1)

 キャプションは、表示させたい文字列を書きます。今回は「メッセージ」としました。
プロパティウインドウから、「Caption」を「メッセージ」にします。

 せっかくなのでFontも変更して文字の大きさなども変更してみましょう。
プロパティウインドウから、「Font」をクリックすると右側にオプション選択ボタンが出ますのでクリックしてフォントや文字の大きさなどを変更します。

イベントでラベルの文字を変更する

 ではプロパティ値をプログラムから変更してみましょう。ラベルの文字列(Caption)を変更してみます。ラベルの文字列を変更するプログラムは以下の通りです。
 これで日本語の「メッセージ」から英語の「Message」に変わるはずです。

Label1.Caption = "Message"

 このコードをどのタイミングで実行するかが問題です。今回は、フォームがクリックされた時のイベントで変更するようにしてみましょう。
 フォームがクリックされた時のイベントは、UserForm_Click()ですね。
 コードウインドウのドロップボックスからUserForm1を選択して、Clickを選択します。
 ここに先ほどのコードを書きます。一応わかりやすいようにメッセージボックスも表示させてみます。

'/// UserForm1 ////
Private Sub UserForm_Click()
    MsgBox "フォームがクリックされました。"
    Label1.Caption = "Message"
End Sub

 これで実行してみましょう。実行は、前回と同じように Module1 の test() を実行します。
プロシージャ内にカーソルを置いてF5で実行できます。
 前回のコードを書いていない方は、以下のコードを標準モジュールに書いてください。

'/// Module1 に書くコード ////
Sub test()
    UserForm1.Show
End Sub

実行して動作を確認する

 何回か実行してみてフォーム上をクリックしてみてください。
 ラベルの付近では反応しません。これはラベルがフォームの上に張り付いているためです。
 ラベル上のクリックに反応するためには、そのイベントに書く必要があります。

ラベルのクリックイベントを追加

 ではLabel1がクリックされた時のイベントプロシージャにコードを書きます。
 UserForm1のコード画面にして、コードウインドウのドロップボックスからLabel1を選択して、Clickを選択します。
 自動でイベントプロシージャが記述されますので、内部に以下のようなコードを書いて実行してみましょう。

'/// UserForm1 ////
Private Sub Label1_Click()
    MsgBox "ラベルがクリックされました。"
    Label1.Caption = "Label Message"
End Sub

 動作としては、ラベル付近では「Label Message」、フォーム上では「Message」と表示されるはずです。尚、一旦フォームを閉じて再度起動すると、プロパティウインドウで設定した値(メッセージ)が表示されるはずです。

Initialize(初期化)イベントの処理を追加

 更にInitialize(初期化)イベントにも処理を追加してみましょう。やり方は前回と同じで、UserForm1のコードウインドウから、ドロップボックスで UserFormInitialize と選択してください。 自動でイベントプロシージャが記述されるので内部は以下のようにします。

'/// UserForm1 ////
Private Sub UserForm_Initialize()
    MsgBox "初期設定をします。"
    Label1.Caption = ""
End Sub

 ここではキャプションを空白に設定しましたので、今度は起動直後にはラベルに文字は表示されません。プロパティウインドウで設定しておいたキャプション「メッセージ」も、初期化の Initialize が実行された時点で空白に書き換えられます。
 ですから、「メッセージ」という文字は一度も見る事はなくなってしまいます。

 ところで、今回 Font に関しては変化がありませんでした。これは、プロパティウインドウで最初に設定して以来、変更していないからです。

 ラベルに関しては、実際にはキャプションを頻繁に変更する事はなく、プロパティウインドウで設定した後はそのまま表示し続けるケースがほとんどです。

まとめ

 今回はラベルのキャプションを通じてイベントをいろいろ試してみました。イベントに慣れていない方も何となくイメージが湧いてきたのではないでしょうか。
 
 イベントはそれぞれのフォームやコントロールそれぞれに存在しています。
 これらは自分で用意するものではなくシステムから送られてくるイベントに対して反応する形でプログラムを書きます。
 イベントはExcel本体にもいろいろあります。「ブックを開いた時」「閉じる前」「シートを変更する時」など様々です。
 ただ、全てのイベントを覚える必要はありません。使うイベントというのは大体決まっていますので、それらを押さえておけば大抵はやりたいことができるでしょう。

 ユーザーフォームのプログラムは中級程度の扱いですが、簡単なものから慣れていけばきっと書けるようになります。

最後に、これまでのプログラムコードです。

'/// UserForm1 ////
Private Sub 終了Button_Click()
    Unload Me
End Sub

Private Sub UserForm_Click()
    MsgBox "フォームがクリックされました。"
    Label1.Caption = "Message"
End Sub

Private Sub Label1_Click()
    MsgBox "ラベルがクリックされました。"
    Label1.Caption = "Label Message"
End Sub

Private Sub UserForm_Initialize()
    MsgBox "初期設定をします。"
    Label1.Caption = ""
End Sub
'/// Module1 ////
Sub test()
    UserForm1.Show
End Sub

 

タイトルとURLをコピーしました