Vejamos agora um pequeno exercício para praticar o uso de controles (Controls).
Existe um arquivo com formulário pronto e elementos de controle. Precisamos escrever um código que faça todos os elementos funcionarem para que o usuário possa preencher nosso banco de dados improvisado por meio da interação com o formulário.
Aqui está o arquivo Excel para download: controls_exercise.xls
Agora deve estar claro que o objetivo aqui é preencher a tabela usando o formulário.
Alguns pontos a considerar:
Primeiro, precisamos aumentar a propriedade Zoom do nosso formulário para 120 para facilitar o uso:
Já abordamos a verificação dos botões de opção (na primeira lição sobre controles), então aqui usamos uma solução simples.
"Sra" está selecionado por padrão (propriedade Value: True), ou seja, não verificaremos o endereço ao selecioná-lo.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Carregando a lista quando o formulário está aberto
For i = 1 To 252 'Gerando uma lista de 252 países a partir da planilha País
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Uma solução simples seria exibir uma caixa de diálogo se algum dos controles estiver vazio.
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
'Instruções para inserir um contato aqui...
End If
End Sub
Mas para complicar um pouco mais, cada elemento deve ser verificado separadamente, e se algum deles estiver vazio, a cor do seu nome () deve mudar para vermelho:
Private Sub CommandButton_Add_Click()
'Defina a cor do título como preto
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)
'Controles de conteúdo
If TextBox_Last_Name.Value = "" Then 'SE nada for especificado...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Defina a cor do título para vermelho
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
'Instruções para inserir um contato aqui...
End If
End Sub
O seguinte código deverá ser inserido no local indicado no código acima (ver comentários):
Dim row_number As Integer, salutation As String
'Seleção de recurso
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption 'Recurso selecionado
End If
Next
'row_number = número da linha da última célula não vazia na coluna +1
row_number = Range("A65536").End(xlUp).Row + 1
'Inserindo valores em uma planilha
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
'Após colar, os valores originais são retornados
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
É isso, aqui está o código completo do exercício e o arquivo para download:
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Lista de 252 países na planilha "País"
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Defina a cor do nome como preto
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)
'Controles de conteúdo
If TextBox_Last_Name.Value = "" Then 'SE nada for especificado...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Defina a cor do título para vermelho
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
'Caso o formulário seja preenchido, os valores serão colados na planilha
Dim row_number As Integer, salutation As String
'Seleção de recurso
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = número da linha da última célula não vazia na coluna +1
row_number = Range("A65536").End(xlUp).Row + 1
'Inserindo valores em uma planilha
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
'Após inserir os dados, retornamos os valores iniciais
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
Aqui está o arquivo Excel para download: controls_exercise2.xls