Elegir entre cuadros combinados dependientes

Tengo un formulario y quisiera poder elegir entre cuadros combinados teniendo en cuenta que al elegir el primero solo podre elegir en el segundo los que dependan del primero.

Por ejemplo, tengo el campo MARCA y MODELO.

Si escojo MARCA - RENAULT solo podré elegir en MODELO entre KANGOO o CLIO.

Las marcas y modelos las tengo en esta hoja Excel.

Escoger solo con una opción se pero teniendo en cuenta dos posibilidades no si es posible.

Además quisiera que no existera posibilidad de elegir entre ninguna otra opción.

1 Respuesta

Respuesta
1

En el userform tienes que poner combobox, en tu imagen tienes textbox, cambia esos textbox por combobox1 y combobox2

Copia todo el siguiente código en tu userform

Cambia "Hoja6" por el nombre de tu hoja que contiene los datos.

Según tu ejemplo las marcas y modelos están en las columnas K y L


Nota: Revisa que la declaración Dim h1 vaya hasta el principio de todo el código

Dim h1
'
Private Sub ComboBox1_Change()
'Por.Dante Amor
    ComboBox2.Clear
    ComboBox2.Value = ""
    If ComboBox1.Value = "" Or ComboBox1.ListIndex = -1 Then
        Exit Sub
    End If
    For i = 2 To h1.Range("K" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "K") = ComboBox1 Then
            agregar ComboBox2, h1.Cells(i, "L")
        End If
    Next
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h1 = Sheets("Hoja6")
    For i = 2 To h1.Range("K" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h1.Cells(i, "K")
    Next
    'Propiedad para elegir únicamente datos del list
    ComboBox1.Style = fmStyleDropDownList
    ComboBox2.Style = fmStyleDropDownList
End Sub
'
Sub agregar(combo As ComboBox, dato As String)
'Por.Dante Amor
    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

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

¡Gracias! Funciona perfecto.

Ahora quiero entender el código para el futuro. Una cosa que no entiendo es por qué va al principio de todo la declaración de la variable h1, antes que el resto del código.

¿te sabe mal aclarármelo?

Un abrazo!

Moisés.

Sin problema. Declaro al principio la variable, para que funcione como variable global, después cuando activas el userform establezco la hoja en la variable h1, entonces puedo utilizar la hoja en todo el código, en cualquier evento solamente haciendo referencia a h1, por ejemplo:

    For i = 2 To h1.Range("K" & Rows.Count).End(xlUp).Row
        If h1.Cells(i, "K") = ComboBox1 Then
            agregar ComboBox2, h1.Cells(i, "L")
        End If
    Next

sal u dos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas