コントロールでマウスボタンを押したときと離したときに発生するイベント(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 キーの状態を参照できます。

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

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

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

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

サンプルコード

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

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

上のラベルに対する 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

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

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

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

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

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

上のラベルの上でマウスボタンを押すと MouseDown イベントが発生して押されたマウスボタンの種類が下のラベルに表示されます。

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

マウスボタンを離すと MouseUp イベントが発生して下のラベルの表示がリセットされます。

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

右のマウスボタンや中央のマウスボタンを押すと、そのように下のラベルに表示されます。

ユーザーフォームにおけるMouseDownおよびMouseUpイベントとは(7)

ユーザーフォームにおけるMouseDownおよびMouseUpイベントとは(8)

Click、DblClick、MouseUp、MouseDownイベントの発生する順番

コントロールによってはマウス関連のイベントとして MouseDown イベントや MouseUp イベントの他に Click イベントや DblClick イベントが発生します。これらのイベントがどの順番で発生するのかを確認してみます。

ユーザーフォームにラベルを設置しました。

Click、DblClick、MouseUp、MouseDownイベントの発生する順番(1)

ラベルに対する 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

Click、DblClick、MouseUp、MouseDownイベントの発生する順番(2)

ユーザーフォームを表示したあと、ラベルを一度クリックしてください。

Click、DblClick、MouseUp、MouseDownイベントの発生する順番(3)

イミディエイトウィンドウを確認すると、 MouseDownMouseUpClick の順番でイベントが発生することが確認できます。

Click、DblClick、MouseUp、MouseDownイベントの発生する順番(4)

今度は先ほどのラベルをダブルクリックしてください。イミディエイトウィンドウを確認すると、 MouseDownMouseUpClickDblClickMouseUp の順番でイベントが発生することが確認できます。

Click、DblClick、MouseUp、MouseDownイベントの発生する順番(5)

ダブルクリックの場合は最後に MouseUp イベントがもう一度発生する点にご注意ください。

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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