Los controles (Controls) también se pueden usar fuera de los formularios. En el siguiente ejemplo, usaremos los controles directamente en la hoja de cálculo.
Tenga en cuenta que el "Modo de diseñador" ("Design mode") debe activarse para modificar un control particular ubicado en la hoja de trabajo (y también debe desactivarse para usar este control).
Antes de ver el siguiente ejemplo, veamos esto:
Ahora, queremos agregar un color de fondo a las celdas y seleccionarlas según la posición del control deslizante en un área definida de 30 filas por 10 columnas.
Las propiedades del control deslizante vertical para desplazar la pantalla son las siguientes:
El control deslizante horizontal es el mismo, excepto Max: 10.
El siguiente es el código que se ejecutará cada vez que cambie el valor del control deslizante vertical (Value):
'Fondo gris en celdas Cells.Interior.Color = RGB(240, 240, 240) 'Aplicamos color y seleccionamos una celda. With Cells(ScrollBar_vertical.Value, ActiveCell.Column) 'Defina la celda usando Valor (Value) .Interior.Color = RGB(255, 220, 100) 'Usamos color naranja. .Select 'Seleccionamos una celda End With
Este código se activa cuando ocurren los eventos Change y Scroll y ejecuta instrucciones sin importar en qué parte del control deslizante hicimos clic.
El siguiente es el código para el control deslizante vertical:
Private Sub vertical_bar() 'Aplicar un fondo gris para las celdas. Cells.Interior.Color = RGB(240, 240, 240) 'Aplicar el fondo y seleccionar la celda. With Cells(ScrollBar_vertical.Value, ActiveCell.Column) .Interior.Color = RGB(255, 220, 100) 'Naranja .Select 'Seleccionamos una celda End With End Sub Private Sub ScrollBar_vertical_Change() vertical_bar End Sub Private Sub ScrollBar_vertical_Scroll() vertical_bar End Sub
Y aquí, a su vez, está el código para el control deslizante horizontal:
Private Sub horizontal_bar() 'Aplicar un fondo gris para las celdas. Cells.Interior.Color = RGB(240, 240, 240) 'Aplicar el fondo y seleccionar la celda. With Cells(ActiveCell.Row, ScrollBar_horizontal.Value) .Interior.Color = RGB(255, 220, 100) 'Naranja .Select 'Seleccionamos una celda End With End Sub Private Sub ScrollBar_horizontal_Change() horizontal_bar End Sub Private Sub ScrollBar_horizontal_Scroll() horizontal_bar End Sub
Este es el punto de partida para nuestro siguiente ejemplo:
Puede descargar el archivo de ejemplo Excel:userform4.xls
Al ejecutar el formulario, queremos que los 4 países se carguen en la lista desplegable (usando el método AddItem):
Private Sub UserForm_Initialize() For i = 1 To 4 '=> para llenar 4 países ComboBox_Country.AddItem Cells(1, i) 'Sumamos los valores de las celdas de A1 a A4 usando un bucle Next End Sub
Cuando cambia el valor del menú desplegable, queremos agregar las ciudades del país seleccionado usando un bucle similar al anterior.
Para hacer esto, necesitamos saber el número de la columna, así como el número de ciudades (filas) en esta columna.
La propiedad ListIndex contiene el número de secuencia del elemento seleccionado en la lista desplegable (a diferencia de Value, que contiene el valor del elemento de la lista). Tenga en cuenta que ListIndex comienza con el número 0.
El número de columna se obtiene a través de:
column_number = ComboBox_Country.ListIndex + 1
Para obtener el número de filas en la columna seleccionada para un país específico, podemos encontrar el número de la última celda no vacía:
rows_number = Cells(1, column_number).End(xlDown).Row
Usando esta información, ahora es posible crear un ciclo para agregar las ciudades a la lista:
Private Sub ComboBox_Country_Change() 'Limpiando la lista (de lo contrario, las ciudades se agregarán inmediatamente) ListBox_Cities.Clear Dim column_number As Integer, rows_number As Integer 'El número de secuencia del elemento seleccionado (ListIndex comienza con 0): column_number = ComboBox_Country.ListIndex + 1 'Número de filas en la columna seleccionada con países: rows_number = Cells(1, column_number).End(xlDown).Row For i = 2 To rows_number '=> llenar la lista con ciudades ListBox_Cities.AddItem Cells(i, column_number) Next End Sub
Nota: Podríamos acortar el código, pero eso lo haría menos legible:
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
La ciudad que elijamos se introducirá en el campo de texto "Elección" ("Choice"):
Private Sub ListBox_Cities_Click() TextBox_Choice.Value = ListBox_Cities.Value End Sub
Puede ver un ejemplo terminado en este archivo Excel:userform4b.xls