TOP

VBA-Lección 12.3. Controles (Controls)

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


Barra de desplazamiento (ScrollBar)

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:

  • Min : 1
  • Max : 30 (30 filas)
  • Value : posición del control deslizante (en este caso, entre 1 y 30)
  • 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
    

    Desplegable y ListBox (ComboBox y ListBox)

    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