Está en la página 1de 11

encuentran los datos.

Después 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 código los elementos que serán agregados al ComboBox de la siguiente
manera:

1 Private Sub UserForm_Initialize()

2  

3 Dim rango, celda As Range


4 Set rango = Worksheets("Ejemplo1").Range("A1:A7")
5  
6 For Each celda In rango

7     ComboBox1.AddItem celda.Value

8 Next celda

9  
End Sub
10

Con este código recorremos todas las celdas del rango A1:A7 y por cada celda
agregamos un nuevo elemento al ComboBox. Observa que el código 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 solución para
considerar el uso de un nombre de rango dinámico.
RANGO DINÁMICO PARA CARGAR DATOS AL COMBOBOX
Para crear un rango dinámico es necesario utilizar la función DESREF y la función
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
Fórmulas > Nombres definidos > Asignar nombre.

Creamos el nombre MiLista que nos servirá para hacer referencia a este rango


dinámico de celdas. En el último cuadro de texto, donde generalmente colocamos
una referencia a un rango de celdas, colocaremos la siguiente fórmula:
=DESREF(Ejemplo2!$A$1,0,0,CONTARA(Ejemplo2!$A:$A))
Esta fórmula 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 función CONTARA que cuenta las celdas no
vacías de la columna A.

De esta manera queda creado nuestro nombre de rango dinámico que utilizaremos
para cargar datos al ComboBox. Si quieres saber un poco más sobre la creación
de este tipo de nombres te recomiendo leer el artículo Nombres de rango
dinámicos. En las siguientes secciones haremos uso de este rango dinámico
recién creado.
COMBOBOX EN HOJA DE EXCEL CON RANGO DINÁMICO
Si nuestro ComboBox se encuentra en la hoja de Excel, podemos hacer referencia
al rango dinámico abriendo la ventana de propiedades y para la
propiedad ListFillRange colocar el nombre del rango dinámico:
Sin embargo, con esta adecuación no es suficiente para que la actualización del
ComboBox sea automática. Si dejamos las cosas así, los datos se refrescarán
solamente hasta que cerremos y volvamos a abrir el libro, así que lo mejor será
agregar código adicional a nuestra hoja para asegurarnos de que la actualización
se hace en cuanto modificamos los elementos de la columna A.

1
Private Sub Worksheet_Change(ByVal Target As Range)
2     If Not Intersect(Target, Range("A:A")) Is Nothing Then
3         With ComboBox1

4             .Value = ""

5             .ListFillRange = "=MiLista"

6         End With

    End If
7
End Sub
8

Con este código nos aseguramos de que, al momento de agregar o eliminar un


elemento de la columna A, el ComboBox refrescará automáticamente sus
elementos.

elementos.
COMBOBOX EN FORMULARIO VBA CON RANGO DINÁMICO
Para hacer que un ComboBox que está ubicado dentro de un formulario cargue
sus datos desde el rango dinámico, debemos utilizar el siguiente código:

1 Private Sub UserForm_Initialize()


2  
3 Dim rango, celda As Range
4 Set rango = Range("MiLista")

5  
6 For Each celda In rango

7     ComboBox1.AddItem celda.Value

Next celda
8

9  
End Sub
10

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


precisamente el nombre del rango dinámico. 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 código adicional ya que cada vez que
abramos el formulario se actualizarán los elementos del ComboBox.

Solo resta que descargues el libro de trabajo para seguir probando con los


ejemplos mostrados en este artículo. En el archivo descargado encontrarás dos
hojas, la primera contiene los primeros dos ejemplos del artículo y la segunda hoja
contiene los ejemplos que hacen uso del rango dinámico.
‐----------

El siguiente ejemplo usa un ComboBox para mostrar las opciones de ubicación de


imágenes para un control. Cada vez que el usuario hace clic en una opción de la
lista, la imagen y el título se actualizan en CommandButton . Este ejemplo de
código también usa el método AddItem para completar las opciones
de ComboBox .

Para usar este ejemplo, copie este código de muestra en la parte Declaraciones de
un formulario. Asegúrese de que el formulario contenga:

 Una etiqueta denominada Label1.
 Un CommandButton llamado CommandButton1.
 Un ComboBox llamado ComboBox1.
Private Sub UserForm_Initialize()

Label1.Left = 18

Label1.Top = 12

Label1.Height = 12

Label1.Width = 190

Label1.Caption = "Select picture placement " _

& "relative to the caption."

'Add list entries to combo box. The value of each

'entry matches the corresponding ListIndex value

'in the combo box.

ComboBox1.AddItem "Left Top" 'ListIndex = 0

ComboBox1.AddItem "Left Center" 'ListIndex = 1

ComboBox1.AddItem "Left Bottom" 'ListIndex = 2

ComboBox1.AddItem "Right Top" 'ListIndex = 3

ComboBox1.AddItem "Right Center" 'ListIndex = 4

ComboBox1.AddItem "Right Bottom" 'ListIndex = 5

ComboBox1.AddItem "Above Left" 'ListIndex = 6

ComboBox1.AddItem "Above Center" 'ListIndex = 7

ComboBox1.AddItem "Above Right" 'ListIndex = 8

ComboBox1.AddItem "Below Left" 'ListIndex = 9

ComboBox1.AddItem "Below Center" 'ListIndex = 10

ComboBox1.AddItem "Below Right" 'ListIndex = 11

ComboBox1.AddItem "Centered" 'ListIndex = 12

'Use drop-down list

ComboBox1.Style = fmStyleDropDownList

'Combo box values are ListIndex values


ComboBox1.BoundColumn = 0

'Set combo box to first entry

ComboBox1.ListIndex = 0

ComboBox1.Left = 18

ComboBox1.Top = 36

ComboBox1.Width = 90

ComboBox1.ListWidth = 90

'Initialize CommandButton1

CommandButton1.Left = 230

CommandButton1.Top = 36

CommandButton1.Height = 120

CommandButton1.Width = 120

'Note: Be sure to refer to a bitmap file that is

'present on your system, and to include the path

'in the filename.

CommandButton1.Picture = _

LoadPicture("c:\windows\argyle.bmp")

CommandButton1.PicturePosition = ComboBox1.Value

End Sub

Private Sub ComboBox1_Click()

Select Case ComboBox1.Value

Case 0 'Left Top

CommandButton1.Caption = "Left Top"

CommandButton1.PicturePosition = _
fmPicturePositionLeftTop

Case 1 'Left Center

CommandButton1.Caption = "Left Center"

CommandButton1.PicturePosition = _

fmPicturePositionLeftCenter

Case 2 'Left Bottom

CommandButton1.Caption = "Left Bottom"

CommandButton1.PicturePosition = _

fmPicturePositionLeftBottom

Case 3 'Right Top

CommandButton1.Caption = "Right Top"

CommandButton1.PicturePosition = _

fmPicturePositionRightTop

Case 4 'Right Center

CommandButton1.Caption = "Right Center"

CommandButton1.PicturePosition = _

fmPicturePositionRightCenter

Case 5 'Right Bottom

CommandButton1.Caption = "Right Bottom"

CommandButton1.PicturePosition = _

fmPicturePositionRightBottom

Case 6 'Above Left

CommandButton1.Caption = "Above Left"


CommandButton1.PicturePosition = _

fmPicturePositionAboveLeft

Case 7 'Above Center

CommandButton1.Caption = "Above Center"

CommandButton1.PicturePosition = _

fmPicturePositionAboveCenter

Case 8 'Above Right

CommandButton1.Caption = "Above Right"

CommandButton1.PicturePosition = _

fmPicturePositionAboveRight

Case 9 'Below Left

CommandButton1.Caption = "Below Left"

CommandButton1.PicturePosition = _

fmPicturePositionBelowLeft

Case 10 'Below Center

CommandButton1.Caption = "Below Center"

CommandButton1.PicturePosition = _

fmPicturePositionBelowCenter

Case 11 'Below Right

CommandButton1.Caption = "Below Right"

CommandButton1.PicturePosition = _

fmPicturePositionBelowRight

Case 12 'Centered
CommandButton1.Caption = "Centered"

CommandButton1.PicturePosition = _

fmPicturePositionCenter

End Select

End Sub

También podría gustarte