ユーザーフォーム入門 - 住所入力フォームを作成する(4) 〜 起動時に住所録ファイルを開く|Excel VBA |
「ユーザーフォーム入門 - 住所入力フォームを作成する(3) 〜 入力順序とIMEの設定」に続き、ユーザーフォームの処理を作成していきます。
ユーザーフォームの起動時に、住所録となる専用ブックを開く処理を作成しましょう。
まず、ユーザーフォームに関する処理を記述するための "フォームモジュール" を用意します。
Private Sub UserForm_Click()
End Sub
Private Sub UserForm_Initialize()
End Sub
イベントプロシージャは、"どのオブジェクトに" "どのイベントが発生" したら実行するか、その組み合せでプロシージャを用意します。
上記のステップ4で挿入された「UserForm_Click」はユーザーフォームクリック時、「UserForm_Initialize」はユーザーフォーム初期化時に実行されるイベントプロシージャです。
ここでは、1つ目の「UserForm_Click」プロシージャは不要なので削除し、ユーザーフォーム初期化時の処理を作成します。
Option Explicit
'出力用の住所録ファイルのファイル名
Private Const BOOK_NAME As String = "住所録.xlsx"
'フォーム初期化時のイベント
Private Sub UserForm_Initialize()
Dim strPath As String
Dim Ret As String
Dim wbAddress As Workbook
'住所録ファイルが既に開いていたら変数に格納してプロシージャを抜ける
'開いていない場合に備えてエラー処理
On Error Resume Next
Set wbAddress = Workbooks(BOOK_NAME)
If Err.Number = 0 Then Exit Sub
On Error GoTo 0
'住所録ファイルのフルパスを取得
strPath = ThisWorkbook.Path & "\" & BOOK_NAME
'Dir関数でファイル存在確認
'(戻り値:存在→"ファイル名"、存在しない→長さ0の文字列)
Ret = Dir(strPath)
'住所録ファイルが存在しない場合
If Ret = "" Then
'ブックを新規作成し、1つ目のシートに項目名を設定
Set wbAddress = Workbooks.Add
wbAddress.Sheets(1).Range("A1:I1").Value = _
Array("会社名", "よみ", "郵便番号", "住所1", "住所2", _
"TEL", "FAX", "Email", "担当")
'すべてのセルの表示形式を文字列にする
wbAddress.Sheets(1).Cells.NumberFormatLocal = "@"
'いったん保存する
wbAddress.SaveAs strPath
'住所録ファイルが存在する場合
Else
'ブックを開く
Set wbAddress = Workbooks.Open(strPath)
End If
End Sub
ここまでできたら、[F5]キーで実行してみましょう。
ユーザーフォームとともに、項目名が入力されたブックが表示され、同じフォルダ内に "住所録.xlsx" ファイルが保存されます。
確認できたら、ユーザーフォームは右上の[×]ボタンで閉じ、"住所録.xlsx"も閉じてください。
次回は、ユーザーフォームに入力したデータを専用ブック "住所録.xlsx" に転記する処理を作成していきましょう。