VBA-ユーザーフォーム
A User Formは、ユーザーデータ入力をより制御しやすく、ユーザーにとって使いやすいようにするカスタムビルドのダイアログボックスです。この章では、単純なフォームを設計し、Excelにデータを追加する方法を学習します。
Step 1− Alt + F11を押してVBAウィンドウに移動し、[挿入]メニューに移動して[ユーザーフォーム]を選択します。選択すると、次のスクリーンショットに示すようにユーザーフォームが表示されます。
Step 2 −指定されたコントロールを使用してフォームをデザインします。
Step 3−各コントロールを追加した後、コントロールに名前を付ける必要があります。キャプションはフォームに表示されるものに対応し、名前はその要素のVBAコードを記述したときに表示される論理名に対応します。
Step 4 −以下は、追加された各コントロールに対する名前です。
コントロール | 論理名 | キャプション |
---|---|---|
から | frmempform | 従業員フォーム |
従業員IDラベルボックス | empid | 従業員ID |
名ラベルボックス | ファーストネーム | ファーストネーム |
姓ラベルボックス | 苗字 | 苗字 |
dobラベルボックス | ドブ | 生年月日 |
mailidラベルボックス | mailid | 電子メールID |
パスポートホルダーラベルボックス | パスポートホルダー | パスポートホルダー |
EmpIDテキストボックス | txtempid | 適用できません |
名のテキストボックス | txtfirstname | 適用できません |
姓のテキストボックス | txtlastname | 適用できません |
メールIDテキストボックス | txtemailid | 適用できません |
日付コンボボックス | cmbdate | 適用できません |
月コンボボックス | cmbmonth | 適用できません |
年コンボボックス | cmbyear | 適用できません |
はいラジオボタン | radioyes | はい |
ラジオボタンなし | ラジオノ | 番号 |
送信ボタン | btnsubmit | 参加する |
キャンセルボタン | btncancel | キャンセル |
Step 5 −フォームを右クリックし、[コードの表示]を選択して、フォームの読み込みイベントのコードを追加します。
Step 6 −次のスクリーンショットに示すように、オブジェクトのドロップダウンから「ユーザーフォーム」を選択し、「初期化」メソッドを選択します。
Step 7 −フォームをロードしたら、テキストボックスがクリアされ、ドロップダウンボックスが入力され、ラジオボタンがリセットされていることを確認します。
Private Sub UserForm_Initialize()
'Empty Emp ID Text box and Set the Cursor
txtempid.Value = ""
txtempid.SetFocus
'Empty all other text box fields
txtfirstname.Value = ""
txtlastname.Value = ""
txtemailid.Value = ""
'Clear All Date of Birth Related Fields
cmbdate.Clear
cmbmonth.Clear
cmbyear.Clear
'Fill Date Drop Down box - Takes 1 to 31
With cmbdate
.AddItem "1"
.AddItem "2"
.AddItem "3"
.AddItem "4"
.AddItem "5"
.AddItem "6"
.AddItem "7"
.AddItem "8"
.AddItem "9"
.AddItem "10"
.AddItem "11"
.AddItem "12"
.AddItem "13"
.AddItem "14"
.AddItem "15"
.AddItem "16"
.AddItem "17"
.AddItem "18"
.AddItem "19"
.AddItem "20"
.AddItem "21"
.AddItem "22"
.AddItem "23"
.AddItem "24"
.AddItem "25"
.AddItem "26"
.AddItem "27"
.AddItem "28"
.AddItem "29"
.AddItem "30"
.AddItem "31"
End With
'Fill Month Drop Down box - Takes Jan to Dec
With cmbmonth
.AddItem "JAN"
.AddItem "FEB"
.AddItem "MAR"
.AddItem "APR"
.AddItem "MAY"
.AddItem "JUN"
.AddItem "JUL"
.AddItem "AUG"
.AddItem "SEP"
.AddItem "OCT"
.AddItem "NOV"
.AddItem "DEC"
End With
'Fill Year Drop Down box - Takes 1980 to 2014
With cmbyear
.AddItem "1980"
.AddItem "1981"
.AddItem "1982"
.AddItem "1983"
.AddItem "1984"
.AddItem "1985"
.AddItem "1986"
.AddItem "1987"
.AddItem "1988"
.AddItem "1989"
.AddItem "1990"
.AddItem "1991"
.AddItem "1992"
.AddItem "1993"
.AddItem "1994"
.AddItem "1995"
.AddItem "1996"
.AddItem "1997"
.AddItem "1998"
.AddItem "1999"
.AddItem "2000"
.AddItem "2001"
.AddItem "2002"
.AddItem "2003"
.AddItem "2004"
.AddItem "2005"
.AddItem "2006"
.AddItem "2007"
.AddItem "2008"
.AddItem "2009"
.AddItem "2010"
.AddItem "2011"
.AddItem "2012"
.AddItem "2013"
.AddItem "2014"
End With
'Reset Radio Button. Set it to False when form loads.
radioyes.Value = False
radiono.Value = False
End Sub
Step 8−ここで、[送信]ボタンにコードを追加します。送信ボタンをクリックすると、ユーザーはワークシートに値を追加できるはずです。
Private Sub btnsubmit_Click()
Dim emptyRow As Long
'Make Sheet1 active
Sheet1.Activate
'Determine emptyRow
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
'Transfer information
Cells(emptyRow, 1).Value = txtempid.Value
Cells(emptyRow, 2).Value = txtfirstname.Value
Cells(emptyRow, 3).Value = txtlastname.Value
Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
Cells(emptyRow, 5).Value = txtemailid.Value
If radioyes.Value = True Then
Cells(emptyRow, 6).Value = "Yes"
Else
Cells(emptyRow, 6).Value = "No"
End If
End Sub
Step 9 −ユーザーが[キャンセル]ボタンをクリックしたときにフォームを閉じるメソッドを追加します。
Private Sub btncancel_Click()
Unload Me
End Sub
Step 10−「実行」ボタンをクリックしてフォームを実行します。フォームに値を入力し、[送信]ボタンをクリックします。次のスクリーンショットに示すように、値は自動的にワークシートに流れ込みます。