コントロールでマウスボタンを押したときと離したときに発生するイベント(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 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。