ComboBox dependiente en UserForm. Creado con Microsoft VBA (Visual Basic para aplicaciones) bajo Microsoft Excel


Seguro que en alguna ocasión, te has encontrado con la necesidad de crear un combobox dependiente de otro, es decir, dependiendo de la elección que hagas en el combobox principal, el dependiente mostrará unos resultados u otros.

Pues bien, creo firmemente que este ejemplo, es la forma más sencilla de realizar el citado ejercicio. Sólo con una hoja de datos, unas pocas líneas de código (que por cierto muestro totalmente comentadas para una mejor comprensión del ejercicio), y un par de combobox, lo tendremos solucionado. Dicho esto y sin más dilación entraré en materia.

En primer lugar, citaré los elementos que necesitas y los nombres que debes darle para que funcione correctamente el ejercicio, aunque posteriormente cuando hayas comprendido el funcionamiento del mismo podrás modificarlos a tu gusto sin mayor problema.

Debes crear una hoja en Excel llamada CIUDADES, donde irán todos los datos que necesitamos para el funcionamiento de los combobox.

Ejemplo de la hoja de datos

Una vez hayas creado la hoja con todos los datos, debes crear un formulario e insertar dos Label, dos ComboBox, un CommandButton (opcional) y darles los siguientes nombres, quedando un formulario similar al de la imagen inferior.

  1. Label_ComboBox_PRINCIPAL
  2. Label_ComboBox_DEPENDIENTE
  3. ComboBox_PRINCIPAL
  4. ComboBox_DEPENDIENTE
  5. CommandButton_CERRAR

Formulario

Ya tenemos, la hoja de datos y el formulario, ahora vamos a por el código usando en primer lugar el evento UserForm_Initialize, para que lo que indiquemos se ejecute al iniciar el formulario. Código donde seleccionamos la hoja con la que vamos a trabajar (en este caso la citada CIUDADES), donde nos posicionamos en la celda correspondiente y donde definimos los items del ComboBox_PRINCIPAL. Fijaros en un detalle muy importante, los items del ComboBox_PRINCIPAL, coinciden con la fila 1 de la hoja, el resto será el resultado de rangos para el ComboBox_DEPENDIENTE.

Private Sub UserForm_Initialize() 'Al iniciar el formulario...
    Sheets("CIUDADES").Select 'Seleccionamos la hoja con la que vamos a trabajar
    Range("A1").Select 'Nos posicionamos en la primera celda de la hoja

    With ComboBox_PRINCIPAL 'Definimos los items del comboBox principal
        .AddItem "Barcelona" 'Item 1
        .AddItem "Gerona" 'Item 2
        .AddItem "Lérida" 'Item 3
        .AddItem "Tarragona" 'Item 4
    End With
End Sub

Hasta el momento, tenemos en funcionamiento el ComboBox_PRINCIPAL.

ComboBox_PRINCIPAL

Ahora vamos a definir los rangos para el ComboBox_DEPENDIENTE. Para ello utilizaremos el evento ComboBox_PRINCIPAL_Exit, para que lo que indiquemos se ejecute al salir del ComboBox_PRINCIPAL, o lo que es lo mismo, al hacer la selección en uno de sus items. Para ello, en este caso, utilizamos cuatro condiciones, una por cada item del ComboBox_PRINCIPAL, donde se indican los rangos correspondientes a cada uno de ellos.

' Definimos los rangos del comboBox dependiente
' Dependiendo de la selección del item en el comboBox principal, el comboBox dependiente asignará un rango u otro
Private Sub ComboBox_PRINCIPAL_Exit(ByVal Cancel As MSForms.ReturnBoolean) 'Al salir del combobox principal...
    If ComboBox_PRINCIPAL.Text = "Barcelona" Then ComboBox_DEPENDIENTE.RowSource = "A2 : A297" 'Rango para el Item 1
    If ComboBox_PRINCIPAL.Text = "Gerona" Then ComboBox_DEPENDIENTE.RowSource = "B2 : B207" 'Rango para el Item 2
    If ComboBox_PRINCIPAL.Text = "Lérida" Then ComboBox_DEPENDIENTE.RowSource = "C2 : C215" 'Rango para el Item 3
    If ComboBox_PRINCIPAL.Text = "Tarragona" Then ComboBox_DEPENDIENTE.RowSource = "D2 : D167" 'Rango para el Item 4
End Sub

ComboBox_DEPENDIENTE

Y aquí finalizaría el ejercicio, teniendo en funcionamiento el ComboBox_PRINCIPAL y el ComboBox_DEPENDIENTE. Pero si en un principio agregaste también el CommandButton_CERRAR entonces debes finalizar el ejercicio introduciendo el siguiente código, donde al hacer click en el botón CERRAR se muestra un mensaje de aviso de cierre, para que el usuario decida si salir o continuar en la aplicación.

Private Sub CommandButton_CERRAR_Click() 'Al hacer clic en el botón cerrar...
    Titulo = "ComboBox DEPENDIENTE por David Martín Surroca" 'Damos título a la ventana del mensaje
    MsgBox "Espero que el ejercicio te haya sido útil. Hasta pronto.", vbOKOnly + vbInformation, Titulo 'Ventana del mensaje
    Me.Hide 'Ocultamos el formulario
End Sub

Descargar ejercicio ComboBox dependiente.

Anuncios

2 pensamientos en “ComboBox dependiente en UserForm. Creado con Microsoft VBA (Visual Basic para aplicaciones) bajo Microsoft Excel

    • En primer lugar muchas gracias por tu comentario Leopoldo, y no tiene porque darte miedo jajaja el Copyright simplemente te indica la fecha en que realicé dicho ejercicio, pero aún así me pareció curioso compartirlo con todos vosotros, por si a alguien pudiera interesarle.

      Me gusta

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s