Llenar un ComboBox según el valor de otro ComboBox

Tengo un formulario con dos ComboBox llamados 'Entidad' y 'Localidad'.

El Combo Entidad lo he llenado desde el cuadro de propiedades con un rango definido de celdas que contienen los 32 estados de la república Mexicana de este modo 'L39:L40'. Por otro lado tengo una serie de Municipios de cada entidad que va de M9 hasta M308.

El segundo ComboBox 'Localidad' esta deshabilitado por defecto, y se habilita una vez que se halla escogido un valor en 'Entidad'. Los valores de 'Localidad' deberían llenarse de pendiendo el valor elegido en 'Entidad', por ejemplo:

Si el valor de 'Entidad' = "Aguascalientes" las opciones de 'Localidad' deberían ser las celdas entre M9:M11. Si la primera opción fuera "Baja California", el rango de celdas a elegir sería de M12:M19, y así dependiendo de cada estado y la cantidad de municipios que tenga.

Estuve investigando y encontré que la propiedad RowSource se puede modificar en código así que decidí usar un Select Case para hacer el llenado según sea el caso, pero mi código aunque no me arroja error, tampoco me pone los valores dentro del 'Localidad'. ¿Alguna sugerencia?

Dejo copia del código que estoy usando:

Sub add_val()

Select Case Entidad.Value
Case Entidad.Value = "Aguascalientes"
With UserForm1.Localidad
Localidad.RowSource = "Base!M9:M11"
End With
Case Entidad.Value = "Baja California"
With Me.Localidad
Localidad.RowSource = "Base!M12:M19"
End With
End Select

End Sub

2 Respuestas

Respuesta
4

Te anexo otra opción.

Pon la información como la imagen, de esa forma sabrás qué municipio pertenece a cada estado:

el código:

Private Sub ComboBox1_Change()
'Cuando cambia el combo1, se llena el combo2
    ComboBox2.Value = ""
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then Exit Sub
    '
    Set h = Sheets("Hoja1")
    Set r = h.Columns("A")
    Set b = r.Find(ComboBox1.Value, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            ComboBox2.AddItem h.Cells(b.Row, "B").Value
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
End Sub
'
Private Sub UserForm_Activate()
    Set h = Sheets("Hoja1")
    'carga el combo1
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        Call Agregar(ComboBox1, h.Cells(i, "A"))
    Next
End Sub
'
Sub Agregar(combo As ComboBox, dato As String)
    'por.DAM agrega los item únicos y en orden alfabético
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo y ya no lo agrega
            Case 1: combo.AddItem dato, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
End Sub

De esa forma no tendrías que poner un rowsource para cada estado.

Sal u dos. Si te funciona, no olvides valorar la respuesta.

¡Gracias! 

Como siempre funciona muy bien. Y gracias por los comentarios en el código.

Me queda una duda más. Pude notar que en el caso de haber elegido una opción del Combo1 por error y al querer corregirla y seleccionar la correcta, el Combo2 se llenaba con los datos de la primera opción mas los datos de la segunda opción, como podría corregir ese detalle?

Para muestra un par de imágenes:

Cierto, me faltó ese detalle, es con esta instrucción: ComboBox2. Clear

Quedaría así el evento cuando cambias el combo1

Private Sub ComboBox1_Change()
'Cuando cambia el combo1, se llena el combo2
    ComboBox2.Value = ""
    ComboBox2.clear
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then Exit Sub
    '
    Set h = Sheets("Hoja1")
    Set r = h.Columns("A")
    Set b = r.Find(ComboBox1.Value, LookAt:=xlWhole)
    If Not b Is Nothing Then
        celda = b.Address
        Do
            ComboBox2.AddItem h.Cells(b.Row, "B").Value
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> celda
    End If
End Sub

sal u dos, no olvides valorar mi respuesta.

Respuesta
1

Gustavo Armando,

Adjunto enlace archivo excel con tu consulta desarrollada para su revisión.

Esta alternativa limpia el combobox Localidad cuando se selecciona otro item en el comboBox Entidad.

Espero que te sirva de ayuda. Cualquier consulta estaré atento.

Llenar un combobox según el valor de otro combobox

ANDER GS

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas