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