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).
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:
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
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