コントロールの上でマウスが動いたときに発生するイベント(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 | 中央ボタンと右ボタンが押されています |
| 7 | 3 つのボタンがすべて押されています |
Shift の値は Shift キー、 Ctrl キー、および Alt キーの状態を参照できます。
| 値 | 説明 |
|---|---|
| 1 | Shift キーが押されました |
| 2 | Ctrl キーが押されました |
| 3 | Shift キーと Ctrl キーが押されました |
| 4 | Alt キーが押されました |
| 5 | Alt キーと Shift キーが押されました |
| 6 | Alt キーと Ctrl キーが押されました |
| 7 | Alt キー、Shift キー、Ctrl キーの 3 つが押されました |
X および Y の値はコントロールの左端または上端からのマウスの位置を水平位置または垂直位置をポイント数で参照できます。
Index を参照することで Pages または Tabs コレクション内の Page または Tab オブジェクトのインデックスを参照できます。
対象のコントロールの上でマウスが動くと MouseMove イベントが発生し、 MouseMove イベントに対するイベントプロシージャが呼び出されます。例えばラベルの上にマウスが移動してきたときに実行したい処理を MouseMove イベントに対するイベントプロシージャ中に記述しておいてください。
それでは簡単なサンプルで試してみます。ユーザーフォームにラベルを設置しました。
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
これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。
ユーザーフォームが表示されました。
いずれかのラベルの上にマウスを移動させると、 MouseMove イベントが発生してマウスが移動しているラベルの背景色が変化します。
ラベルの外にマウスを移動させると、今度はユーザーフォームで MouseMove イベントが発生してラベルの背景色が元に戻ります。
-- --
Excel のユーザーフォームで MouseMove イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。