コントロールでマウスボタンを押したときと離したときに発生するイベント(MouseDown,MouseUpイベント)
ユーザーフォームに設置したコントロールでマウスボタンを押したときに発生するイベントが MouseDown イベント、そしてマウスボタンを離したときに発生するイベントが MouseUp イベントです。マウスボタンの種類を判別することができます。ここでは Excel のユーザーフォームで MouseDown および MouseUp イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説します。
(Last modified: )
ユーザーフォームにおけるMouseDownおよびMouseUpイベントとは
ユーザーフォームにおける MouseDown イベントおよび MouseUp イベントがどのような時に発生するのか、また発生したときのイベントプロシージャの記述方法について解説します。
どのようなときにイベントが発生するのか
MouseDown イベントはユーザーフォームまたはコントロールの上でマウスボタンが押されたときに発生します。
MouseUp イベントはユーザーフォームまたはコントロールの上でマウスボタンを離したときに発生します。
MouseDownおよびMouseUpイベントのイベントプロシージャ
MouseDown イベントおよび MouseUp イベントに対するイベントプロシージャは次のような形式となっています。
Private Sub オブジェクト_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub
Private Sub オブジェクト_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub
なおマルチページおよびタブストリップの場合だけはイベントプロシージャは次のような形式となっています。
Private Sub オブジェクト_MouseDown(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub
Private Sub オブジェクト_MouseUp(ByVal Index As Long, ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) End Sub
引数の値を参照することでどのような状態でマウスが移動しているのかを調べることができます。
Button の値はマウスボタンの状態を参照できます。
| 値 | 説明 |
|---|---|
| 1 | 左ボタンが押されています |
| 2 | 右ボタンが押されています |
| 4 | 中央ボタンが押されています |
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 オブジェクトのインデックスを参照できます。
対象のコントロールでマウスボタンを押すと MouseDown イベントが発生し、 MouseDown イベントに対するイベントプロシージャが呼び出されます。また対象のコントロールでマウスボタンを離すと MouseUp イベントが発生し、 MouseUp イベントに対するイベントプロシージャが呼び出されます。例えばラベルでマウスボタンが押されたときに実行したい処理を MouseDown イベントに対するイベントプロシージャ中に記述しておいてください。
それでは簡単なサンプルで試してみます。ユーザーフォームにラベルを設置しました。
上のラベルに対する MouseDown イベントおよび MouseUp イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。ラベルの上でマウスを押すと、押されたマウスボタンの種類を下のラベルに表示します。またマウスを話すと表示を消します。
Option Explicit
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Select Case Button
Case 1
Label2.Caption = "左ボタン"
Case 2
Label2.Caption = "右ボタン"
Case 4
Label2.Caption = "中央ボタン"
End Select
End Sub
Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Label2.Caption = ""
End Sub
これでコードの記述は完了です。では実際に試してみます。「Sub/ユーザーフォームの実行」をクリックしてください。
ユーザーフォームが表示されました。
上のラベルの上でマウスボタンを押すと MouseDown イベントが発生して押されたマウスボタンの種類が下のラベルに表示されます。
マウスボタンを離すと MouseUp イベントが発生して下のラベルの表示がリセットされます。
右のマウスボタンや中央のマウスボタンを押すと、そのように下のラベルに表示されます。
Click、DblClick、MouseUp、MouseDownイベントの発生する順番
コントロールによってはマウス関連のイベントとして MouseDown イベントや MouseUp イベントの他に Click イベントや DblClick イベントが発生します。これらのイベントがどの順番で発生するのかを確認してみます。
ユーザーフォームにラベルを設置しました。
ラベルに対する 4 つのイベントのイベントプロシージャをそれぞれ次のように記述しました。イベントが発生するとイミディエイトウィンドウにでイベントの種類を出力します。
Option Explicit
Private Sub Label1_Click()
Debug.Print "Click"
End Sub
Private Sub Label1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "DblClick"
End Sub
Private Sub Label1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Debug.Print "MouseDown"
End Sub
Private Sub Label1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Debug.Print "MouseUp"
End Sub
ユーザーフォームを表示したあと、ラベルを一度クリックしてください。
イミディエイトウィンドウを確認すると、 MouseDown 、 MouseUp 、 Click の順番でイベントが発生することが確認できます。
今度は先ほどのラベルをダブルクリックしてください。イミディエイトウィンドウを確認すると、 MouseDown 、 MouseUp 、 Click 、 DblClick 、 MouseUp の順番でイベントが発生することが確認できます。
ダブルクリックの場合は最後に MouseUp イベントがもう一度発生する点にご注意ください。
-- --
Excel のユーザーフォームで MouseDown および MouseUp イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。