教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】フォームがダブルクリックされた時に処理を実行する方法を教えて!

f:id:m_kbou:20210123095401p:plain

フォームがダブルクリックされた時に処理を実行するには、フォームのDblClickイベントプロシージャを使用します。その使い方について紹介します。

 

 

構文

イベントプロシージャの記述方法は以下の通りです。

Private Sub[オブジェクト名]_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  [実行する処理内容]
End Sub

[説明]:

フォームがダブルクリックされた時に処理を実行させるイベントプロシージャはDblClickプロシージャを使用します。[オブジェクト名]にはフォームのオブジェクト名(フォーム名)を記述します。また、[実行する処理内容]にはフォームがダブルクリックされた時に実行する処理内容を記述します。Cancelは引数となり、Cancelに「True」をセットするとイベントを中止し、「False」をセットするとイベントを実行します。初期値では「False」がセットされています。内容を纏めると、「[オブジェクト名]で指定したフォームがダブルクリックされた場合、[実行する処理内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    MsgBox "画面がダブルクリックされました。"
End Sub

[サンプル画面]: 

今回は以下のフォームを使用して処理を実行する方法について説明します。
※フォームの作成方法についてはこちらを参考にして下さい。

f:id:m_kbou:20210121112143p:plain

 

DblClickイベントプロシージャの記述方法

(1)VBE(VBA記述画面)を開き、予め作成したフォームがある事を確認します。(※VBEの開き方についてはこちらを参考にして下さい。)

f:id:m_kbou:20210626085811p:plain

(2)UserForm1フォームをダブルクリックします。

f:id:m_kbou:20210626085829p:plain

(3)UserForm1フォームが表示されるので、フォーム上の任意の場所で右クリックします。そうすると小窓が開くので、「コードの表示」を選択します。

f:id:m_kbou:20210626085842p:plain

※この時点で「UserForm_Click」イベントプロシージャが表示されます。(これは自動的に作成される仕組みとなっているようです)

f:id:m_kbou:20210626085858p:plain

(4)オブジェクトボックスの▼ボタンをクリックします。

f:id:m_kbou:20210626085913p:plain

(5)プルダウン一覧の中から「UserForm」を選択します。

f:id:m_kbou:20210626085931p:plain

(6)プロシージャボックスの▼ボタンをクリックします。

f:id:m_kbou:20210626085947p:plain

(7)プルダウン一覧の中から「DblClick」を選択します。

f:id:m_kbou:20210626090003p:plain

(8)「UserForm_DblClick」イベントプロシージャが表示されます。(※このUserForm_DblClickイベントプロシージャの中に実行する処理内容を記述する事で、フォームがダブルクリックされた時に処理を実行する事ができます。)

f:id:m_kbou:20210626090017p:plain

(9)(8)で作成したイベントプロシージャに実行させる内容を記述します。以下で記述例を2つ紹介します。

(例①)フォームがダブルクリックされた時にメッセージを表示する方法

フォームがダブルクリックされた時にメッセージを表示する方法について紹介します。

[プログラミング例①]:

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  MsgBox "画面がダブルクリックされました。"
End Sub

内容を説明すると、

「UserForm1フォームがダブルクリックされた時に”画面がダブルクリックされました。”のメッセージを表示して下さい。」

との意味になります。

f:id:m_kbou:20210626090033p:plain

[実行例①]:

(実行前)

プログラムを実行します。(※実行するにはメニューにある実行ボタン(▶)をクリックします。)

f:id:m_kbou:20210626090048p:plain

UserForm1画面が表示されるので、画面上でダブルクリックします。 

f:id:m_kbou:20210626090104p:plain

(実行後)

画面がダブルクリックされると同時に「画面がダブルクリックされました。」のメッセージが表示されます。(※DblClickイベントプロシージャが有効に実行された事がわかります。)

f:id:m_kbou:20210626090117p:plain

[サンプル①]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

(例②)フォームがダブルクリックされた時にフォームを閉じるか否かを確認する方法

フォームがダブルクリックされた時にフォームを閉じるか否かを確認する方法について紹介します。

[プログラミング例②]:

Private Sub UserForm_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
  If (MsgBox("画面を閉じますか?", 292, "メッセージ") = 6) Then
    Unload UserForm1
    MsgBox "画面を閉じました。"
  Else
    Cancel = True
  End If
End Sub

内容を説明すると、

「UserForm1フォームがダブルクリックされた時に画面を閉じるか否かをMsgBoxで確認し、閉じる場合はUserForm1フォームを閉じて”画面を閉じました。”をメッセージで表示、閉じない場合はUserForm1フォームを継続表示します。」

との意味になります。

f:id:m_kbou:20210626093407p:plain

[実行例②]:

(実行前)

プログラムを実行します。(※実行するにはメニューにある実行ボタン(▶)をクリックします。)

f:id:m_kbou:20210626093420p:plain

UserForm1画面が表示されるので、画面上でダブルクリックします。 

f:id:m_kbou:20210626092103p:plain

「画面を閉じますか?」のMsgBoxが表示されます。

f:id:m_kbou:20210626092053p:plain

(実行後)

・<いいえ>ボタンをクリックした場合(フォームを閉じないを選択)

UserForm1画面がそのまま表示されます。(※DblClickイベントプロシージャで画面を閉じないイベント(Cancel = True)が実行された事がわかります。)

f:id:m_kbou:20210626092103p:plain

・<はい>ボタンをクリックした場合(フォームを閉じるを選択)

UserForm1画面が閉じて、「画面を閉じました。」が表示されます。(※DblClickイベントプロシージャで画面を閉じるイベントが実行された事がわかります。)

f:id:m_kbou:20210626092457p:plain

[サンプル②]:

上記で説明したファイルをダウンロードできます。ご自由にお使い下さい。

drive.google.com

DblClickイベントプロシージャの記述方法についての説明は以上です。

 

おわりに

今回はフォームがダブルクリックされた時に処理を実行する方法について説明しました。様々な場面で画面をダブルクリックするケースがあると思います。場面場面に応じた処理内容を記述して有効に活用してみて下さい。また、似たようなイベントプロシージャに、フォームがクリックされた時に処理を実行するClickイベントプロシージャもあります。こちらも一緒に覚えておいて下さい。