コントロール上でダブルクリックしたときに発生するイベント(DblClickイベント)

ユーザーフォームに設置したコントロール上でダブルクリックされた時に発生するイベントが DblClick イベントです。ダブルクリックとはコントロールの上でマウスボタンを 2 回クリックすることで、 Click イベントが発生したあとに発生します。ここでは Excel のユーザーフォームで DblClick イベントがどのようなときに発生するのかやイベントが発生したときに呼び出されるイベントプロシージャの記述方法について解説します。

(Last modified: )

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

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

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

DblClick イベントはコントロールをマウスボタンを 2 回クリックしたときに発生します。

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

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

Private Sub オブジェクト_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

End Sub

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

Private Sub オブジェクト_DblClick(ByVal Index As Long, ByVal Cancel As MSForms.ReturnBoolean)

End Sub

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

対象のコントロールでマウスボタンが 2 回クリックされると DblClick イベントが発生し、 DblClick イベントに対するイベントプロシージャが呼び出されます。例えばラベルがダブルクリックされた時に実行したい処理を DblClick イベントに対するイベントプロシージャ中に記述しておいてください。

※ 引数の Cancel の使い方についてはこのあとで解説します。

サンプルコード

それでは簡単なサンプルで試してみます。ユーザーフォームにリストボックスを設置しました。

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

ユーザーフォームが表示される前に発生する Initialize イベントに対するイベントプロシージャを作成し、その中でリストボックスに項目を追加しておきます。

Option Explicit

Private Sub UserForm_Initialize()
    Dim i As Integer
    
    For i = 1 To 10
        ListBox1.AddItem "項目" & i
    Next i
End Sub

そしてリストボックスに対する DblClick イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。

Option Explicit

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox ListBox1.Text
End Sub

リストボックスの項目がダブルクリックされると、現在選択している項目の値を取得してメッセージボックスで表示しています。

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

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

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

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

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

リストボックスに表示されている項目をマウスでクリックすると項目が選択されるだけですが、項目をマウスでダブルクリックすると、 DblClick イベントが発生し、メッセージボックスにクリックした項目の値が表示されます。

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

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

2回目のクリックをキャンセルする

例えばトグルボタンをクリックすると選択と非選択を交互に繰り返しますが、ダブルクリックしてしまうと選択してすぐに非選択となり元の状態に戻ります。

2回目のクリックをキャンセルする(1)

もしダブルクリックしても 2 回目のクリックを無視したい場合には DblClick イベントのイベントプロシージャの中で、引数の Cancel の戻り値として True を設定することで、 2 回目のクリックを無視することができます。

実際に試してみます。トグルボタンに対する DblClick イベントに対するイベントプロシージャをコードウィンドウで次のように記述してください。

Option Explicit

Private Sub ToggleButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Cancel = True
End Sub

2回目のクリックをキャンセルする(2)

ユーザーフォームを表示し、トグルボタンをダブルクリックしても 2 回目のクリックは無視されるためトグルボタンは選択された状態となります。

2回目のクリックをキャンセルする(3)

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

DblClick イベントが発生する場合、その前に Click イベントが発生します。例としてラベルを使って確認してみます。

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

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

ラベルに対する Click イベントと DblClick イベントのイベントプロシージャをそれぞれ次のように記述しました。イベントが発生するとイミディエイトウィンドウにでイベントの種類を出力します。

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

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

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

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

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

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

-- --

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

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

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