次に、コントロール (Controls) の使用を練習するための小さな演習を見てみましょう。
既製のフォームとコントロール要素を含むファイルがあります。ユーザーがフォームとの対話を通じて即席のデータベースにデータを入力できるように、すべての要素が機能するコードを記述する必要があります。
ダウンロードする Excel ファイルは次のとおりです: controls_exercise.xls
ここでの目的は、フォームを使用してテーブルにデータを入力することであることが明らかです。
考慮すべき点がいくつかあります:
まず、使いやすくするために、フォームの Zoom プロパティを 120 に増やす必要があります。
オプション ボタンのチェックについては (コントロールに関する最初のレッスンで) すでに説明したので、ここでは簡単な解決策を使用します。
「Mrs」はデフォルトで選択されています (プロパティ Value: True)。つまり、選択時にアドレスはチェックされません。
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'フォームが開いているときにリストをロードする
For i = 1 To 252 'Country ワークシートから 252 か国のリストを生成する
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
簡単な解決策は、いずれかのコントロールが空の場合にダイアログを表示することです。
Private Sub CommandButton_Add_Click()
If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then
MsgBox "Form incomplete"
Else
'ここに連絡先を入力する手順...
End If
End Sub
ただし、もう少し複雑にするために、各要素を個別にチェックする必要があります。要素のいずれかが空の場合は、その名前 () の色が赤に変わる必要があります。
Private Sub CommandButton_Add_Click()
'タイトルの色を黒に設定します
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'コンテンツコントロール
If TextBox_Last_Name.Value = "" Then '何も指定しない場合...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'タイトルの色を赤に設定します
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'ここに連絡先を入力する手順...
End If
End Sub
次のコードを上記のコードで示された場所に挿入する必要があります (コメントを参照)。
Dim row_number As Integer, salutation As String
'アピールの選択
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption '異議申し立てが選択されました
End If
Next
'row_number = 列 +1 の空でない最後のセルの行番号
row_number = Range("A65536").End(xlUp).Row + 1
'ワークシートへの値の挿入
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'貼り付け後は元の値が返されます
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
以上です。ここに、演習用の完成したコードとダウンロードするファイルがあります。
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() '「国」シート上の 252 か国のリスト
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'名前の色を黒に設定します
Label_Last_Name.ForeColor = RGB(0, 0, 0)
Label_First_Name.ForeColor = RGB(0, 0, 0)
Label_Address.ForeColor = RGB(0, 0, 0)
Label_Place.ForeColor = RGB(0, 0, 0)
Label_Country.ForeColor = RGB(0, 0, 0)
'コンテンツコントロール
If TextBox_Last_Name.Value = "" Then '何も指定しない場合...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'タイトルの色を赤に設定します
ElseIf TextBox_First_Name.Value = "" Then
Label_First_Name.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Address.Value = "" Then
Label_Address.ForeColor = RGB(255, 0, 0)
ElseIf TextBox_Place.Value = "" Then
Label_Place.ForeColor = RGB(255, 0, 0)
ElseIf ComboBox_Country.Value = "" Then
Label_Country.ForeColor = RGB(255, 0, 0)
Else
'フォームに入力すると、値がワークシートに貼り付けられます
Dim row_number As Integer, salutation As String
'アピールの選択
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = 列 +1 の空でない最後のセルの行番号
row_number = Range("A65536").End(xlUp).Row + 1
'ワークシートへの値の挿入
Cells(row_number, 1) = salutation
Cells(row_number, 2) = TextBox_Last_Name.Value
Cells(row_number, 3) = TextBox_First_Name.Value
Cells(row_number, 4) = TextBox_Address.Value
Cells(row_number, 5) = TextBox_Place.Value
Cells(row_number, 6) = ComboBox_Country.Value
'データを挿入した後、初期値を返します
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
End If
End Sub
ダウンロード用の Excel ファイルは次のとおりです: controls_exercise2.xls