他からフォーカスを受け取る前と他にフォーカスが移動する前に発生するイベント(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 の使い方はあとで解説します。

サンプルコード

それでは簡単なサンプルで試してみます。ユーザーフォームにテキストボックスを設置しました。

ユーザーフォームにおけるEnterおよびExitイベントとは(1)

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

ユーザーフォームにおけるEnterおよびExitイベントとは(2)

これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。

ユーザーフォームにおけるEnterおよびExitイベントとは(3)

ユーザーフォームが表示されました。上のテキストボックスは Enter イベントによって背景色が変更されています。

ユーザーフォームにおけるEnterおよびExitイベントとは(4)

他のテキストボックスにフォーカスを移すと、移す前のテキストボックスは Exit イベントによって背景色が元の色に戻り、フォーカスが移った先のテキストボックスは Enter イベントで背景色が変更されます。

ユーザーフォームにおけるEnterおよびExitイベントとは(5)

ユーザーフォームにおけるEnterおよびExitイベントとは(6)

フォーカスの移動をキャンセルする

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)

フォーカスの移動をキャンセルする(2)

ユーザーフォームを表示してください。

フォーカスの移動をキャンセルする(3)

1 文字も入力せずに TAB キーを押して別のテキストボックスにフォーカスを移そうとすると、次のようなメッセージボックスが表示されます。

フォーカスの移動をキャンセルする(4)

メッセージボックスを閉じると、フォーカスの移動がキャンセルされているためフォーカスは元のテキストボックスに残ったままとなっています。

フォーカスの移動をキャンセルする(5)

一文字以上テキストボックスに入力したあとであれば別のテキストボックスにフォーカスを移動させることができます。

フォーカスの移動をキャンセルする(6)

このように引数の Cancel を使用することで、コントロールからフォーカスの移動をキャンセルすることができます。

-- --

Excel のユーザーフォームで MouseDown および MouseUp イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。