Вы находитесь на странице: 1из 6

Cmo cargar datos a un

ComboBox en Excel
El Cuadro combinado, tambin conocido como ComboBox, es un
control ActiveX que nos permite crear una lista desplegable de la cual
podremos seleccionar alguno de sus elementos. Pero antes de poder
utilizar este control, es necesario saber cmo cargar datos a un
ComboBox a partir de una lista de valores en una hoja de Excel.
Para este ejemplo considerar dos posibles escenarios. El primero
supone que el control ha sido agregado directamente a la hoja de
Excel y el segundo escenario supondr que el ComboBox se ha
insertado en unFormulario VBA. Para ambos casos tomar los valores
de la columna A y los insertar como los elementos del cuadro
combinado.

Cargar datos al ComboBox en una hoja de Excel


El caso ms simple es cuando has agregado el Cuadro
combinado directamente a la hoja de Excel ya que para agregar sus
elementos bastar con hacer clic derecho sobre el control ActiveX y
seleccionar la opcinPropiedades. Se mostrar el listado de
propiedades y en la propiedad ListFillRange debers indicar el rango
donde se encuentran los datos.

Despus de aceptar los cambios tendremos listo nuestro ComboBox:

Cargar datos al ComboBox en un formulario VBA


En el caso donde el control est dentro de un formulario VBA, es
necesario indicar por cdigo los elementos que sern agregados al
ComboBox de la siguiente manera:
1
2
3
4
5
6
7
8
9
10

Private Sub UserForm_Initialize()


Dim rango, celda As Range
Set rango = Worksheets("Ejemplo1").Range("A1:A7")
For Each celda In rango
ComboBox1.AddItem celda.Value
Next celda
End Sub

Con este cdigo recorremos todas las celdas del rango A1:A7 y por
cada celda agregamos un nuevo elemento al ComboBox. Observa que
el cdigo est dentro del evento UserForm_Initialize lo que ocasionar

que la carga de datos se haga en el momento en que se inicialice el


formulario.

Si la lista de elementos de la columna A fuera fija, con cualquiera de


los ejemplos anteriores ser suficiente para cargar datos al
ComboBox, pero si dicha lista crece continuamente y necesitas que
los nuevos elementos sean considerados dentro del ComboBox,
entonces debemos cambiar un poco el enfoque de la solucin para
considerar el uso de un nombre de rango dinmico.

Rango dinmico para cargar datos al ComboBox


Para crear un rango dinmico es necesario utilizar la funcin
DESREF y la funcin CONTARA la cual nos ayudar a conocer las
celdas con valores dentro de la columna que contiene los datos. Para
crear el nombre debemos ir a la ficha Frmulas > Nombres definidos >
Asignar nombre.

Creamos el nombre MiLista que nos servir para hacer referencia a


este rango dinmico de celdas. En el ltimo cuadro de texto, donde
generalmente colocamos una referencia a un rango de celdas,
colocaremos la siguiente frmula:
=DESREF(Ejemplo2!$A$1,0,0,CONTARA(Ejemplo2!$A:$A))

Esta frmula devolver una referencia a un rango que inicia en la


celda A1 (de la hoja Ejemplo2) y termina N filas por debajo. La
cantidad de filas a desplazarse hacia abajo ser el resultado de la
funcin CONTARA que cuenta las celdas no vacas de la columna A.
De esta manera queda creado nuestro nombre de rango dinmico que
utilizaremos para cargar datos al ComboBox. Si quieres saber un
poco ms sobre la creacin de este tipo de nombres te recomiendo
leer el artculo Nombres de rango dinmicos. En las siguientes
secciones haremos uso de este rango dinmico recin creado.

ComboBox en hoja de Excel con rango dinmico


Si nuestro ComboBox se encuentra en la hoja de Excel, podemos
hacer referencia al rango dinmico abriendo la ventana de
propiedades y para la propiedad ListFillRange colocar el nombre del
rango dinmico:

Sin embargo, con esta adecuacin no es suficiente para que la


actualizacin del ComboBox sea automtica. Si dejamos las cosas
as, los datos se refrescarn solamente hasta que cerremos y
volvamos a abrir el libro, as que lo mejor ser agregar cdigo
adicional a nuestra hoja para asegurarnos de que la actualizacin se
hace en cuanto modificamos los elementos de la columna A.

1
2
3
4
5
6
7
8

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("A:A")) Is Nothing Then
With ComboBox1
.Value = ""
.ListFillRange = "=MiLista"
End With
End If
End Sub

Con este cdigo nos aseguramos de que, al momento de agregar o


eliminar un elemento de la columna A, el ComboBox refrescar
automticamente sus elementos.

ComboBox en Formulario VBA con rango


dinmico
Para hacer que un ComboBox que est ubicado dentro de un
formulario cargue sus datos desde el rango dinmico, debemos utilizar
el siguiente cdigo:
1
2
3
4
5
6
7
8
9
10

Private Sub UserForm_Initialize()


Dim rango, celda As Range
Set rango = Range("MiLista")
For Each celda In rango
ComboBox1.AddItem celda.Value
Next celda
End Sub

La nica diferencia con el primer formulario es que el rango indicado


es precisamente el nombre del rango dinmico. Al momento de abrir el
formulario se cargar el ComboBox con todos los elementos de la
columna A.

En este caso no es necesario agregar cdigo adicional ya que cada


vez que abramos el formulario se actualizarn los elementos del
ComboBox.
Solo resta que descargues el libro de trabajo para seguir probando
con los ejemplos mostrados en este artculo. En el archivo descargado
encontrars dos hojas, la primera contiene los primeros dos ejemplos
del artculo y la segunda hoja contiene los ejemplos que hacen uso del
rango dinmico.

Вам также может понравиться