構文
構文は以下の通りです。
Private Sub UserForm_Activate()
' ここにアクティブ時の処理を記述します
End Sub
' ここにアクティブ時の処理を記述します
End Sub
解説
UserForm_Activateプロシージャは、フォームがアクティブになった瞬間に自動的に実行されます。フォームが隠れている状態から表示されるなど、フォームが非アクティブからアクティブになる瞬間にコードを実行したい場合に適しています。
使い方
具体的な使い方を紹介します。
Private Sub UserForm_Activate()
' アクティブ時の処理を記述します
' 現在の日付と時間をラベルに表示する
Label1.Caption = "現在の日付:" & Date
Label2.Caption = "現在の時間:" & Time
End Sub
' アクティブ時の処理を記述します
' 現在の日付と時間をラベルに表示する
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
' アクティブ時の処理を記述します
' ダイアログボックスを表示して入力を促す
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イベントプロシージャを使用することで、フォームがアクティブになる瞬間に特定の処理を実行することができます。これにより、ユーザーがフォームを操作するたびに自動的に処理を行い、より使いやすいエクセルマクロを作成することが可能です。