コントロールの上でマウスが動いたときに発生するイベント(MouseMoveイベント)

ユーザーフォームに設置したコントロールの上でマウスが動いたときに発生するイベントが MouseMove イベントです。コントロールの上にマウスがあるときに何らかの処理を行いたいときに使用します。ここでは Excel のユーザーフォームで MouseMove イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説します。

(Last modified: )

ユーザーフォームにおけるMouseMoveイベントとは

ユーザーフォームにおける MouseMove イベントがどのような時に発生するのか、また発生したときのイベントプロシージャの記述方法について解説します。

どのようなときにイベントが発生するのか

MouseMove イベントはユーザーフォームまたはコントロールの上でマウスが動いたときに発生します。

MouseMoveイベントのイベントプロシージャ

MouseMove イベントに対するイベントプロシージャは次のような形式となっています。

Private Sub オブジェクト_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub

なおマルチページおよびタブストリップの場合だけはイベントプロシージャは次のような形式となっています。

Private Sub オブジェクト_MouseMove(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)

End Sub

引数の値を参照することでどのような状態でマウスが移動しているのかを調べることができます。

Button の値はマウスボタンの状態を参照できます。

説明
0どのボタンも押されていません
1左ボタンが押されています
2右ボタンが押されています
3右ボタンと左ボタンが押されています
4中央ボタンが押されています
5中央ボタンと左ボタンが押されています
6中央ボタンと右ボタンが押されています
73 つのボタンがすべて押されています

Shift の値は Shift キー、 Ctrl キー、および Alt キーの状態を参照できます。

説明
1Shift キーが押されました
2Ctrl キーが押されました
3Shift キーと Ctrl キーが押されました
4Alt キーが押されました
5Alt キーと Shift キーが押されました
6Alt キーと Ctrl キーが押されました
7Alt キー、Shift キー、Ctrl キーの 3 つが押されました

X および Y の値はコントロールの左端または上端からのマウスの位置を水平位置または垂直位置をポイント数で参照できます。

Index を参照することで Pages または Tabs コレクション内の Page または Tab オブジェクトのインデックスを参照できます。

対象のコントロールの上でマウスが動くと MouseMove イベントが発生し、 MouseMove イベントに対するイベントプロシージャが呼び出されます。例えばラベルの上にマウスが移動してきたときに実行したい処理を MouseMove イベントに対するイベントプロシージャ中に記述しておいてください。

サンプルコード

それでは簡単なサンプルで試してみます。ユーザーフォームにラベルを設置しました。

ユーザーフォームにおけるMouseMoveイベントとは(1)

3 つのラベルに対する MouseChange イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。ラベルの上にマウスが来ると背景色を変更しています。

Option Explicit

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Label1.BackColor = RGB(127, 201, 255)
End Sub

Private Sub Label2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Label2.BackColor = RGB(127, 201, 255)
End Sub

Private Sub Label3_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Label3.BackColor = RGB(127, 201, 255)
End Sub

このままだとラベルの外にマウスが移動しても元の色に戻らないので、ユーザーフォームに対する MouseChange イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。ユーザーフォームの上にマウスが来るとすべてのラベルの背景色を元の色に変更しています。

Option Explicit

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Label1.BackColor = RGB(240, 240, 240)
    Label2.BackColor = RGB(240, 240, 240)
    Label3.BackColor = RGB(240, 240, 240)
End Sub

ユーザーフォームにおけるMouseMoveイベントとは(2)

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

ユーザーフォームにおけるMouseMoveイベントとは(3)

ユーザーフォームが表示されました。

ユーザーフォームにおけるMouseMoveイベントとは(4)

いずれかのラベルの上にマウスを移動させると、 MouseMove イベントが発生してマウスが移動しているラベルの背景色が変化します。

ユーザーフォームにおけるMouseMoveイベントとは(5)

ラベルの外にマウスを移動させると、今度はユーザーフォームで MouseMove イベントが発生してラベルの背景色が元に戻ります。

ユーザーフォームにおけるMouseMoveイベントとは(6)

ユーザーフォームにおけるMouseMoveイベントとは(7)

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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