他からフォーカスを受け取る前と他にフォーカスが移動する前に発生するイベント(Enter,Exitイベント)
ユーザーフォームに設置したコントロールで他のコントロールからフォーカスを受け取る前に発生するイベントが Enter イベント、そして他のコントロールにフォーカスが移動する前に発生するイベントが Exit イベントです。フォーカスを受け取る前や失う前などに処理を行いたい場合に利用できます。ここでは Excel のユーザーフォームで Enter および Exit イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説します。
(Last modified: )
ユーザーフォームにおけるEnterおよびExitイベントとは
ユーザーフォームにおける Enter
イベントおよび Exit
イベントがどのような時に発生するのか、また発生したときのイベントプロシージャの記述方法について解説します。
どのようなときにイベントが発生するのか
Enter
イベントはコントロールに対して別のコントロールからフォーカスを受け取る前に発生します。似ていますがフォーカスを受け取ったときではないのでご注意ください。
Exit
イベントはコントロールから別のコントロールにフォーカスが移動する前に発生します。似ていますがフォーカスを失ったときではないのでご注意ください。
EnterおよびExitイベントのイベントプロシージャ
Enter
イベントおよび Exit
イベントに対するイベントプロシージャは次のような形式となっています。
Private Sub オブジェクト_Enter() End Sub
Private Sub オブジェクト_Exit(ByVal Cancel As MSForms.ReturnBoolean) End Sub
対象のコントロールに他のコントロールからフォーカスを受け取る前に Enter
イベントが発生し、 Enter
イベントに対するイベントプロシージャが呼び出されます。また対象のコントロールから別のコントロールにフォーカスが移動する前に Exit
イベントが発生し、 Exit
イベントに対するイベントプロシージャが呼び出されます。例えばテキストボックスでフォーカスを受け取る前やフォーカスが移動する前に実行したい処理を Enter
イベントや Exit
イベントに対するイベントプロシージャ中に記述しておいてください。
※ Exit
イベントのイベントプロシージャの引数である Cancel
の使い方はあとで解説します。
それでは簡単なサンプルで試してみます。ユーザーフォームにテキストボックスを設置しました。
2 つのテキストボックスに対する Enter
イベントおよび Exit
イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。フォーカスを受け取る前にコントロールの背景色を変更し、フォーカスが移動する前に元に戻します。
Option Explicit Private Sub TextBox1_Enter() TextBox1.BackColor = RGB(214, 238, 255) End Sub Private Sub TextBox2_Enter() TextBox2.BackColor = RGB(214, 238, 255) End Sub Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.BackColor = RGB(255, 255, 255) End Sub Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox2.BackColor = RGB(255, 255, 255) End Sub
これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。
ユーザーフォームが表示されました。上のテキストボックスは Enter
イベントによって背景色が変更されています。
他のテキストボックスにフォーカスを移すと、移す前のテキストボックスは Exit
イベントによって背景色が元の色に戻り、フォーカスが移った先のテキストボックスは Enter
イベントで背景色が変更されます。
フォーカスの移動をキャンセルする
Exit
イベントのイベントプロシージャの引数である Cancel
に「True」を設定すると、別のコントロールにフォーカスを移すことをキャンセルすることができます。
例えば Exit
イベントのイベントプロシージャの中で何らかの条件分岐を行い、問題があった場合にフォーカスの移動をキャンセルさせるといった処理が可能です。
下記のサンプルでは上のテキストボックスから別のテキストボックスにフォーカスが移る前にテキストボックスに入力した文字列をチェックし、空文字であった場合はメッセージボックスを表示した上でフォーカスの移動をキャンセルしています。
Option Explicit Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) If TextBox1.Value = "" Then MsgBox "1文字以上入力してください" Cancel = True End If End Sub
ユーザーフォームを表示してください。
1 文字も入力せずに TAB
キーを押して別のテキストボックスにフォーカスを移そうとすると、次のようなメッセージボックスが表示されます。
メッセージボックスを閉じると、フォーカスの移動がキャンセルされているためフォーカスは元のテキストボックスに残ったままとなっています。
一文字以上テキストボックスに入力したあとであれば別のテキストボックスにフォーカスを移動させることができます。
このように引数の Cancel
を使用することで、コントロールからフォーカスの移動をキャンセルすることができます。
-- --
Excel のユーザーフォームで MouseDown および MouseUp イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
プログラミングや開発環境構築の解説サイトを運営しています。