Excel - Cómo enlazar 3 ComboBox dependientes

En un UserForm tengo, entre otros, tres ComboBox que quiero enlazar. El ComboBox1, despliega los datos de la columna 2, denominada "País". Cuando selecciono un país del ComboBox1, quiero que en el ComboBox2 aparezcan las ciudades que pertenecen a ese país, que se encuentran en la columna 3, denominada "Ciudad". Y cuando cargo este ComboBox2, quiero que en el Combobox3, aparezcan los nombres de personas asociados a estos registros, que se encuentran en la columna7, bajo el título "Nombre".

País (Columna 2)            Ciudad (Columna 3)           Nombre (Columna 7)

Francia                                 París                                      Miguel García Sánchez

Francia                                 París                                      Andrés García García

Francia                                Nimes                                    Ángel Pérez Pérez

Italia                                    Roma                                      Pedro Gil Gil

Portugal                              Lisboa                                    Manuel As AS

En este ejemplo, al desplegar el ComboBox1, debe salir Francia, Italia y Portugal. Si elijo Francia, en el ComboBox2, debe desplegarse con París y Nimes, y si en éste, elijo París, en el ComboBox3, debe desplegarse con los nombres: Miguel García Sánchez y Andrés García García. Y así, para cualquier dato que se vaya eligiendo, siempre enlazados.

Respuesta
1

Gracias por tu respuesta, Dante Amor. He intentado adaptar la primera de tus propuestas. Me he dado cuenta que solo funciona si los ComboBox se encuentran en las columnas A, B y  C. Cuando modifico tu código sigue sin funcionar porque creo que está hecho para que los ComboBox estén en columnas contiguas. En mi caso habría que adaptarlo a las columnas 2, 3 y 7, que es de donde deben cargar los ComboBox1, 2 y 3.

Prueba el siguiente código

Option Explicit
Dim h1
'
Private Sub ComboBox1_Change()
  Dim i As Long
  ComboBox2.Clear
  ComboBox3.Clear
  For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
    If h1.Range("B" & i) = ComboBox1 Then
      agregar ComboBox2, h1.Range("C" & i)
    End If
  Next
End Sub
'
Private Sub ComboBox2_Change()
  Dim i As Long
  ComboBox3.Clear
  For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
    If h1.Range("B" & i) = ComboBox1 And h1.Range("C" & i) = ComboBox2 Then
      agregar ComboBox3, h1.Range("G" & i)
    End If
  Next
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
  Dim i As Long
  Set h1 = Sheets("Base de datos")
  For i = 2 To h1.Range("B" & Rows.Count).End(xlUp).Row
      agregar ComboBox1, h1.Range("B" & i)
  Next
End Sub
'
Sub agregar(combo As ComboBox, dato As String)
'Por.Dante Amor
  Dim i As Long
    For i = 0 To combo.ListCount - 1
        Select Case StrComp(combo.List(i), dato, vbTextCompare)
            Case 0: Exit Sub
            Case 1: combo.AddItem dato, i: Exit Sub
        End Select
    Next
    combo.AddItem dato
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas