Autor: Oscar Cronquist Artículo actualizado en Febrero 23, 2018


Esta publicación de blog muestra cómo crear, rellenar y cambiar los cuadros combinados (control de formulario) mediante programación.

Los controles de formulario no son tan flexibles como los controles ActiveX, pero son compatibles con versiones anteriores de Excel. Puede encontrar los controles en la pestaña desarrollador.

Indice de contenido

  1. Crea un combobox usando vba
  2. Asignar una macro - Cambiar evento
  3. Añadir valores a un combobox
  4. Eliminar valores de un cuadro combinado
  5. Establecer el valor predeterminado en un cuadro combinado
  6. Leer valor seleccionado
  7. Enlace valor seleccionado
  8. Cambiar las propiedades del cuadro combinado.
  9. Rellene combox con valores de un rango dinámico denominado
  10. Rellenar combox con valores de una tabla
  11. Cuadro combinado actualmente seleccionado

Mira este video sobre Combo Boxes

Crea un combobox usando vba

crear-combobox1

Sub CreateFormControl()

'Worksheets("Sheet1").DropDowns.Add(Left, Top, Width, Height)
Worksheets("Sheet1").DropDowns.Add(0, 0, 100, 15).Name = "Combo Box 1"

End Sub

Articulo recomendado

Rellene un cuadro combinado con valores de una tabla dinámica [VBA]

En esta publicación voy a demostrar dos cosas: Cómo llenar un cuadro combinado basado en encabezados de columna de […]

Rellene un cuadro combinado con valores de una tabla dinámica [VBA]

Volver arriba

Asignar una macro - Cambiar evento

Puede asignar una macro a un cuadro combinado haciendo clic derecho en el cuadro combinado y seleccionando "Asignar macro". Seleccione una macro en la lista y presione ok!

Esta subrutina hace lo mismo, asigna una macro llamada "Macro1" a "Combo box 1" en la hoja 1. Macro1 se ejecuta tan pronto como se cambia el valor seleccionado en el cuadro combinado.

Sub AssignMacro()
Worksheets("Sheet1").Shapes("Combo Box 1").OnAction = "Macro1"
End Sub

Articulo recomendado

Ejecutar una macro desde una lista desplegable [VBA]

Este artículo muestra cómo ejecutar una macro VBA usando una lista desplegable. La lista desplegable contiene dos […]

Ejecutar una macro desde una lista desplegable [VBA]

Volver arriba

Añadir valores a un cuadro combinado

Puede agregar una matriz de valores a un cuadro combinado. El método de lista establece las entradas de texto en un cuadro combinado, como una matriz de cadenas.

Sub PopulateCombobox1()
Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.List = _ 
Worksheets("Sheet1").Range("E1:E3").Value
End Sub

La diferencia con la propiedad ListFillRange es que el cuadro combinado se actualiza automáticamente tan pronto como un valor cambia en el rango asignado. No necesita usar eventos o rangos con nombre para actualizar automáticamente el cuadro combinado, excepto si el rango de celdas también cambia de tamaño.

Sub PopulateCombobox2()
Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.ListFillRange = _
"A1:A3"
End Sub

También puede agregar valores uno por uno.

Sub PopulateCombobox3()
With Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat
.AddItem "Sun"
.AddItem "Moon"
.AddItem "Stars"
End Sub

Volver arriba

Articulo recomendado

Añadir nuevos elementos a una lista desplegable automáticamente

Una lista desplegable en Excel evita que un usuario ingrese un valor no válido en una celda. ¿Sabías que tú […]

Añadir nuevos elementos a una lista desplegable automáticamente

Eliminar valores de un cuadro combinado

RemoveAllItems se explica por sí mismo.

Sub RemoveAllItems()

Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.RemoveAllItems

End Sub

El método RemoveItem elimina un valor utilizando un número de índice.

Sub RemoveItem()

Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.RemoveItem 1

End Sub

El primer valor en la matriz se elimina.

Articulo recomendado

Como usar las cajas de dialogo

Un cuadro de diálogo es una excelente alternativa a un formulario de usuario, están integrados en vba y pueden ahorrarle tiempo porque [...]

Como usar las cajas de dialogo

Volver arriba

Establecer el valor predeterminado en un cuadro combinado

La propiedad ListIndex establece el elemento seleccionado actualmente utilizando un número de índice. ListIndex = 1 establece el primer valor en la matriz.

Sub ChangeSelectedValue()
With Worksheets("Sheet1").Shapes("Combo Box 1")
.List = Array("Apples", "Androids", "Windows")
.ListIndex = 1
End With
End Sub

Articulo recomendado

Rellenar un cuadro combinado (control de formulario) [VBA]

En este tutorial, explicaré cómo: Crear un cuadro combinado (control de formulario) Filtrar valores únicos y [...]

Rellenar un cuadro combinado (control de formulario) [VBA]

Volver arriba

Leer valor seleccionado

La propiedad ListIndex también puede devolver el número de índice del elemento seleccionado actualmente. El método de lista también puede devolver un valor de una matriz de valores, en un cuadro combinado. List y Listindex combinados devuelve el valor seleccionado.

Sub SelectedValue()
With Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat
MsgBox "ListIndex: " & .ListIndex & vbnewline & "List value:" .List(.ListIndex)
End With
End Sub

Articulo recomendado

Trabajando con cajas de texto [controles de formulario]

Hay dos tipos diferentes de cuadros de texto, controles de formulario y controles ActiveX. Los controles de formulario solo se pueden usar en […]

Trabajando con cajas de texto [controles de formulario]

Volver arriba

Enlace valor seleccionado

La celda F1 devuelve el número de índice del valor seleccionado en el cuadro combinado 1.

Sub LinkCell()

Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.LinkedCell = "F1"

End Sub

La celda G1 devuelve el valor seleccionado en el cuadro combinado 1.

Sub LinkCell2()

With Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat
    Worksheets("Sheet1").Range("G1").Value = .List(.ListIndex)
End With

End Sub

Articulo recomendado

Trabajando con cajas de texto [controles de formulario]

Hay dos tipos diferentes de cuadros de texto, controles de formulario y controles ActiveX. Los controles de formulario solo se pueden usar en […]

Trabajando con cajas de texto [controles de formulario]

Volver arriba

Cambiar las propiedades del cuadro combinado.

Cambiar el número de líneas de cuadro desplegable de cuadro combinado.

Sub ChangeProperties()
Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.DropDownLines = 2
End Sub

Volver arriba

Rellene combox con valores de un rango dinámico denominado

He creado un rango dinámico llamado Rng, la imagen de arriba muestra como.

Sub PopulateFromDynamicNamedRange()

Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.ListFillRange = "Rng"

End Sub

Puede hacer lo mismo que logra la subrutina haciendo clic derecho en el cuadro combinado y luego a la izquierda haciendo clic en "Control de Formato ...". Rango de entrada: Rng
Volver arriba

Rellenar combox con valores de una tabla

Sub PopulateFromTable()

Worksheets("Sheet1").Shapes("Combo Box 1").ControlFormat.List = _
[Table1[DESC]]

End Sub

Volver arriba

Cuadro combinado actualmente seleccionado

Es muy útil saber con qué cuadro combinado está trabajando el usuario actualmente. La subrutina a continuación se asigna al cuadro combinado 1 y se ejecuta cuando se selecciona un valor. Application.Caller devuelve el nombre del cuadro combinado actual.

Sub CurrentCombo()

MsgBox Application.Caller

End Sub

Volver arriba