教えて!ExcelVBA!

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

【ExcelVBA フォーム&コントロール】フォームを閉じる直前に処理を実行する方法を教えて!

     f:id:m_kbou:20210126111330p:plain

フォームを閉じる直前に処理を実行するには、フォームのQueryCloseイベントプロシージャを使用します。その使い方について説明します。

 

【目次】

 

構文

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

=======================================================

Private Sub [オブジェクト名]_QueryClose()

   [実行する処理内容]

End Sub

=======================================================

[説明]:

フォームを閉じる時に処理を実行させるイベントプロシージャはQueryCloseプロシージャを使用します。[オブジェクト名]にはフォームのオブジェクト名を記述します。また、[実行する処理内容]にはフォームを閉じる直前に実行する処理内容を記述します。内容を纏めると、「[オブジェクト名]で指定したフォームを閉じる直前に[実行する処理内容]を実行して下さい。」との意味になります。

[記述例]:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    MsgBox "画面を閉じます。"
End Sub

[サンプル画面]: 

今回は以下のサンプル画面を使用して処理を実行する方法について説明します。
※サンプル画面の作成方法については、こちらを参考にして下さい。

f:id:m_kbou:20210120090051p:plain

サンプル画面のフォーム名は以下の内容となります。

f:id:m_kbou:20210121112143p:plain

 

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

(1)VBE(VBA記述画面)を開き、フォームにあるUserForm1フォームをダブルクリックします。

f:id:m_kbou:20210126112935p:plain

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

f:id:m_kbou:20210126111425p:plain

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

f:id:m_kbou:20210126111443p:plain

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

f:id:m_kbou:20210126111514p:plain

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

f:id:m_kbou:20210126113014p:plain

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

f:id:m_kbou:20210126113048p:plain

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

f:id:m_kbou:20210126113111p:plain

(7)「UserForm_QueryClose」イベントプロシージャが表示されます。

※このUserForm_QueryCloseイベントプロシージャの中に実行する処理内容を記述する事で、フォームを閉じる直前に処理を実行する事ができます。これ以降は実行する処理例について紹介します。

f:id:m_kbou:20210126113129p:plain(8)UserForm_QueryCloseイベントプロシージャに実行する処理を記述します。今回はフォームを閉じる直前に「画面を閉じます。」を表示させる方法について紹介します。

記述は以下の通りとなります。

[記述例]:

-------------------------------------------------

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    MsgBox "画面を閉じます。"

End Sub

-------------------------------------------------

内容を説明すると、

「UserForm1フォームを閉じる直前に”画面を閉じます。”のメッセージを表示して下さい。」

との意味になります。

f:id:m_kbou:20210126113324p:plain

(9)フォームにあるUserForm1フォームをダブルクリックします。

f:id:m_kbou:20210126113340p:plain

(10)UserForm1フォームが表示されるので、一度フォーム上でクリックをした後にメニューにある実行ボタン▶をクリックします。

f:id:m_kbou:20210126113352p:plain

(11)UserForm1画面が表示されるので、画面右上の<×>ボタンをクリックします。 

f:id:m_kbou:20210126113404p:plain

(12)画面をクリックすると、「画面を閉じます。」のメッセージが表示されます。(※QueryCloseイベントプロシージャが有効に実行された事がわかります)

f:id:m_kbou:20210126113417p:plain

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

 

サンプル

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

drive.google.com

 

おわりに

今回はフォームを閉じる直前に処理を実行する方法について説明しました。似たようなイベントプロシージャにInitializeイベントがあります。Initializeイベントはフォームを表示する直前に実行するイベントとなります。こちらも一緒に覚えておいて下さい。