教えて!ExcelVBA!

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

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

構文

構文は以下の通りです。

Private Sub UserForm_Activate()
    ' ここにアクティブ時の処理を記述します
End Sub

解説

UserForm_Activateプロシージャは、フォームがアクティブになった瞬間に自動的に実行されます。フォームが隠れている状態から表示されるなど、フォームが非アクティブからアクティブになる瞬間にコードを実行したい場合に適しています。

使い方

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

Private Sub UserForm_Activate()
    ' アクティブ時の処理を記述します
    ' 現在の日付と時間をラベルに表示する
    Label1.Caption = "現在の日付:" & Date
    Label2.Caption = "現在の時間:" & Time
End Sub

上記は、フォームがアクティブになった際に現在の日付と時間を表示する例です。

プログラミング例

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

Private Sub UserForm_Activate()
    ' アクティブ時の処理を記述します
    ' ダイアログボックスを表示して入力を促す
    Dim inputText As String
    inputText = InputBox("何か入力してください:", "入力を促すダイアログ")
    ' 入力が行われた場合、入力値をセルに書き込む
    If inputText <> "" Then
        ' シートの参照を取得
        Dim ws As Worksheet
        ' 「データシート」は適宜シート名を変更してください
        Set ws = ThisWorkbook.Sheets("データシート")
        ' 書き込むセルの範囲を指定
        Dim targetCell As Range
        Set targetCell = ws.Range("A1") ' 書き込みたいセルの範囲を選択
        ' 入力値をセルに書き込む
        targetCell.Value = inputText
    End If
End Sub

この例では、UserForm_Activateイベントプロシージャ内でInputBox関数を使用してダイアログボックスを表示します。ユーザーが何か入力すると、その入力値が変数inputTextに格納されます。その後、入力が行われた場合は指定したシートとセルに入力値を書き込みます。

まとめ

UserForm_Activateイベントプロシージャを使用することで、フォームがアクティブになる瞬間に特定の処理を実行することができます。これにより、ユーザーがフォームを操作するたびに自動的に処理を行います。是非活用してください。