Programar 8 Combobox dependientes en un Formulario VBA Excel

Tengo que crear un formulario que necesariamente debe contener 8 combobox y cada uno dependiente de lo que se seleccionó en el anterior.

Imagen:

La idea es que se vaya aplicando el filtro y se carguen los valores unicos para cada elemento, siempre y cuando esten en la fila del Tipo de elemento seleccionado.

Tengo un problema y es que, por ejemplo, el Tipo de elemento pueden ser varios, pero el Fabricante puede ser la Marca-Fabricante, puede ser el mismo de muchos elementos y cuando selecciono el Modelo, entonces me carga modelo de otro Tipo de elementos del mismo fabricante y no quiero que eso pase, porque así las cosas, entonces, esto permitiriía que si el mismo Fabricante, fabrica por ejemplo Partes para computador y también fabrique digamos, llantas para carro, entonces el formulario permitiría que a un computador se le asigne una llanta para carro y pues, eso se sale de su lógica.

Agradezco su valiosa colaboración.

SI gustan, les puedo enviar mi avance a su correo electrónico, todo con el animo de su colaboración.

1 respuesta

Respuesta
4

H o l a:

Te anexo la macro para los combobox, incluye la función para cargar en una función cualquier cambio a los 7 combos; también incluye la verificación si tienes número o texto en los combos

Dim h1
'Por.Dante Amor
Private Sub ComboBox1_Change()
    cargar 2
End Sub
Private Sub ComboBox2_Change()
    cargar 3
End Sub
Private Sub ComboBox3_Change()
    cargar 4
End Sub
Private Sub ComboBox4_Change()
    cargar 5
End Sub
Private Sub ComboBox5_Change()
    cargar 6
End Sub
Private Sub ComboBox6_Change()
    cargar 7
End Sub
Private Sub ComboBox7_Change()
End Sub
'
Private Sub UserForm_Activate()
'Act.Por.Dante Amor
    Set h1 = Sheets("Equipo")
    For i = 2 To h1.Range("C" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h1.Cells(i, "C")
    Next
End Sub
'
Sub cargar(ini)
'Por.Dante Amor
    For i = ini To 7
        Me.Controls("ComboBox" & i).Clear
    Next
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To ini - 1
            If IsNumeric(Me.Controls("ComboBox" & j)) Then
                dato = Val(Me.Controls("ComboBox" & j))
            Else
                dato = Me.Controls("ComboBox" & j)
            End If
            '
            If h1.Cells(i, j + 2) = dato Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
        If igual Then agregar Me.Controls("ComboBox" & ini), h1.Cells(i, ini + 2)
    Next
    Me.Controls("ComboBox" & ini).SetFocus
End Sub
'
Sub agregar(cmbBox As ComboBox, sItem As String)
    'Agrega los item únicos y en orden alfabético
    For i = 0 To cmbBox.ListCount - 1
        Select Case StrComp(cmbBox.List(i), sItem, vbTextCompare)
            Case 0: Exit Sub 'ya existe en el combo, no lo agrega
            Case 1: cmbBox.AddItem sItem, i: Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    cmbBox.AddItem sItem 'Es mayor lo agrega al final
End Sub
'
Private Sub CmdCancelar_Click()
    End
End Sub

':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas