教えて!ExcelVBA!

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

【ExcelVBA フォーム&コントロール】フォームが非アクティブになった時に処理を実行する方法を教えて!

構文

構文は以下の通りです。

Private Sub UserForm_Deactivate()
    ' ここにフォームが非アクティブになった際に実行する処理を記述します
End Sub

解説

Deactivateイベントは、フォームが非アクティブ(他のウィンドウがアクティブになった)になったときに発生するイベントです。このイベントを利用することで、フォームが非アクティブになった瞬間に特定の処理を実行することができます。例えば、フォームが非アクティブになったら自動的にフォームを閉じる、非アクティブ時の見た目を変更する、などの処理を実装することができます。

使い方

具体的な使い方を紹介します。

Private Sub UserForm_Deactivate()
    Unload Me ' フォームを閉じる
End Sub

この例では、Unload Meというコードがフォームを閉じるために使用されます。Deactivateイベントが発生すると、Unload Meが実行され、フォームが自動的に閉じられます。

プログラミング例

以下に、プログラミング例を幾つか紹介します。

例1:フォームが非アクティブになったらメッセージを表示する

Private Sub UserForm_Deactivate()
    MsgBox "フォームが非アクティブになりました。", vbInformation, "お知らせ"
End Sub

この例では、フォームが非アクティブになったらメッセージボックスが表示されます。MsgBox関数は、第1引数に表示したいメッセージを、第2引数にメッセージボックスのアイコンやボタンのスタイルを指定します。ここではvbInformationを指定して、情報を伝えるアイコンが表示されるようにしています。

例2:フォームが非アクティブになったら特定のセルに値を入力する

Private Sub UserForm_Deactivate()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' シート名を適宜変更
    ws.Range("A1").Value = "フォームが非アクティブになりました。"
End Sub

この例では、フォームが非アクティブになったら指定したシートのA1セルに値を入力します。

まとめ

Deactivateイベントを使用することで、フォームが非アクティブになった瞬間に特定の処理を実行することができます。これを活用して、より便利なユーザーインターフェースを実現してください。