TOP

VBA-Lição 12.3. Controles (Controls)

Os controles (Controls) também podem ser usados fora dos formulários. No exemplo a seguir, usaremos os controles diretamente na planilha.

Observe que o "Modo Designer" ("Design mode") deve ser ativado para modificar um determinado controle localizado na planilha (e também deve ser desativado para usar este controle).


Barra de rolagem (ScrollBar)

Antes de olhar para o próximo exemplo, vejamos isto:

Agora queremos adicionar uma cor de fundo às células e selecioná-las com base na posição do controle deslizante em uma área definida de 30 linhas por 10 colunas.

As propriedades do controle deslizante vertical para rolar a tela são as seguintes:

  • Min : 1
  • Max: 30 (30 linhas)
  • Value : posição do controle deslizante (neste caso, entre 1 e 30)
  • O controle deslizante horizontal é o mesmo, exceto Max : 10.

    A seguir está o código que será executado sempre que o valor do controle deslizante vertical (Value) for alterado:

     'Fundo cinza nas células
     Cells.Interior.Color = RGB(240, 240, 240)
    
     'Aplicamos cor e selecionamos uma célula
     With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Defina a célula usando Valor (Value)
         .Interior.Color = RGB(255, 220, 100) 'Usamos cor laranja
         .Select 'Selecionamos uma célula
     End With
    

    Este código é acionado quando os eventos Change e Scroll ocorrem e executa instruções independentemente de qual parte do controle deslizante em que clicamos.

    A seguir está o código para o controle deslizante vertical:

    Private Sub vertical_bar()
         'Aplique um fundo cinza para as células
         Cells.Interior.Color = RGB(240, 240, 240)
         
         'Aplique o plano de fundo e selecione a célula
         With Cells(ScrollBar_vertical.Value, ActiveCell.Column)
             .Interior.Color = RGB(255, 220, 100) 'Laranja
             .Select 'Selecionamos uma célula
         End With
    End Sub
    
    Private Sub ScrollBar_vertical_Change()
         vertical_bar
    End Sub
    
    Private Sub ScrollBar_vertical_Scroll()
         vertical_bar
    End Sub
    

    E aqui, por sua vez, está o código do controle deslizante horizontal:

    Private Sub horizontal_bar()
         'Aplique um fundo cinza para as células
         Cells.Interior.Color = RGB(240, 240, 240)
    
         'Aplique o plano de fundo e selecione a célula
         With Cells(ActiveCell.Row, ScrollBar_horizontal.Value)
             .Interior.Color = RGB(255, 220, 100) 'Laranja
             .Select 'Selecionamos uma célula
         End With
    End Sub
    
    Private Sub ScrollBar_horizontal_Change()
         horizontal_bar
    End Sub
    
    Private Sub ScrollBar_horizontal_Scroll()
         horizontal_bar
    End Sub
    

    Lista suspensa e ListBox (ComboBox e ListBox)

    Este é o ponto de partida para nosso próximo exemplo:

    Você pode baixar o arquivo de exemplo Excel: userform4.xls

    Ao executar o formulário, queremos que os 4 países sejam carregados na lista suspensa (usando o método AddItem):

    Private Sub UserForm_Initialize()
         For i = 1 To 4 '=> para preencher 4 países
            ComboBox_Country.AddItem Cells(1, i) 'Adicionamos os valores das células de A1 a A4 usando um loop
        Next
    End Sub
    

    Quando o valor do menu suspenso muda, queremos adicionar as cidades do país selecionado usando um loop semelhante ao anterior.

    Para fazer isso, precisamos saber o número da coluna, bem como o número de cidades (linhas) nesta coluna.

    A propriedade ListIndex contém o número de sequência do item selecionado na lista suspensa (ao contrário de Value, que contém o valor do item da lista). Observe que ListIndex começa com o número 0.

    O número da coluna é obtido através de:

    column_number = ComboBox_Country.ListIndex + 1
    

    Para obter o número de linhas na coluna selecionada para um país específico, podemos encontrar o número da última célula não vazia:

    rows_number = Cells(1, column_number).End(xlDown).Row
    

    Usando essas informações, agora é possível criar um loop para adicionar as cidades à lista:

    Private Sub ComboBox_Country_Change()
         'Limpando a lista (caso contrário, as cidades serão adicionadas imediatamente)
         ListBox_Cities.Clear
         
         Dim column_number As Integer, rows_number As Integer
         
         'O número de sequência do elemento selecionado (ListIndex começa com 0):
         column_number = ComboBox_Country.ListIndex + 1
         'Número de linhas na coluna selecionada com países:
         rows_number = Cells(1, column_number).End(xlDown).Row
    
         For i = 2 To rows_number '=> preenchendo a lista com cidades
            ListBox_Cities.AddItem Cells(i, column_number)
         Next
    End Sub
    

    Observação: poderíamos encurtar o código, mas isso o tornaria menos legível:

    Private Sub ComboBox_Country_Change()
         ListBox_Cities.Clear
         For i = 2 To Cells(1, ComboBox_Country.ListIndex + 1).End(xlDown).Row
             ListBox_Cities.AddItem Cells(i, ComboBox_Country.ListIndex + 1)
         Next
    End Sub
    

    A cidade que escolhermos será inserida no campo de texto “Escolha” (“Choice”):

    Private Sub ListBox_Cities_Click()
         TextBox_Choice.Value = ListBox_Cities.Value
    End Sub
    

    Você pode ver um exemplo finalizado neste arquivo Excel: userform4b.xls