TOP

VBA-Lição 12.4. Elementos de controle (exercícios)

YouLibreCalc for Excel logo

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:

  • A lista de países baseia-se na lista da segunda folha;
  • Verificar os valores dos elementos de controle antes de adicionar um novo contato;
  • Após inserir os valores, retornando os valores iniciais dos controles sem fechar o formulário.
  • Uma das maneiras de resolver o problema

    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.

    Botão Fechar

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    O conteúdo da lista suspensa

    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
    

    Verificando os elementos de controle

    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
    

    Inserindo dados

    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
    

    Aparência geral

    É 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