Macro para crear lista desplegable dependiente con VBA, con fuente de datos en otra hoja (niveles múltiples)

Necesito crear lista desplegable dependiente (6 niveles aprox) en cada fila de la hoja (hoja1), sus orígenes estarán en otra (hoja2), adjunto imagen.

En la (hoja 1) debe estar las listas desplegables con las descripciones de cada uno, y en otra celda en la misma fila me debe traer su código, al final tengo que tener la columna CLAVE de la (Hoja2).

Nota: Para filtrar cada nivel tiene que ser por código ya que por descripción puede estar en otro nivel y se van a cruzar. Por ejemplo para entrar al nivel 4, se tiene que filtrar nivel 1, 2, 3 y se obtiene nivel4.

Luego de tener las listas dependientes terminadas, estas se deben repetirse en cada fila de (Hoja1).

1 respuesta

Respuesta
1

H o l a: Lo más práctico sería hacer un userform para la captura.

En un correo nuevo, envíame tu archivo. Dime qué datos quieres capturar y qué datos quieres almacenar en la hoja, todo explicado con un ejemplo con datos reales.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “Anthony Capcha” y el título de esta pregunta.

Hola Dante! Te envíe lo solicitado. Gracias.

H o l a : Te anexo el código para la captura y para guardar los datos en la hoja

Public h, h2
Private Sub btnGrabar_Click()
'Por.Dante Amor
    u = h2.Range("A" & Rows.Count).End(xlUp).Row + 1
    h2.Cells(u, "A") = txtMod.Text
    h2.Cells(u, "B") = txtTrx.Text
    h2.Cells(u, "C") = txtCodMov.Text
    h2.Cells(u, "D") = txtNat.Text
    h2.Cells(u, "E") = txtCarAbo.Text
    h2.Cells(u, "F") = txtNomTran.Text
    h2.Cells(u, "G") = txtProducto.Text
    h2.Cells(u, "H") = ComboBox1.List(ComboBox1.ListIndex, 1)
    h2.Cells(u, "I") = ComboBox1.Text
    h2.Cells(u, "J") = ComboBox2.List(ComboBox2.ListIndex, 1)
    h2.Cells(u, "K") = ComboBox2.Text
    h2.Cells(u, "L") = ComboBox3.List(ComboBox3.ListIndex, 1)
    h2.Cells(u, "M") = ComboBox3.Text
    h2.Cells(u, "N") = ComboBox4.List(ComboBox4.ListIndex, 1)
    h2.Cells(u, "O") = ComboBox4.Text
    h2.Cells(u, "P") = ComboBox5.List(ComboBox5.ListIndex, 1)
    h2.Cells(u, "Q") = ComboBox5.Text
    h2.Cells(u, "R") = ComboBox6.List(ComboBox6.ListIndex, 1)
    h2.Cells(u, "S") = ComboBox6.Text
    h2.Cells(u, "T") = TextBox1.Text
    MsgBox "Registro grabado", vbInformation
End Sub
'Por.Dante Amor
Private Sub ComboBox1_Change()
    Call cargar(2)
End Sub
Private Sub ComboBox2_Change()
    Call cargar(3)
End Sub
Private Sub ComboBox3_Change()
    Call cargar(4)
End Sub
Private Sub ComboBox4_Change()
    Call cargar(5)
End Sub
Private Sub ComboBox5_Change()
    Call cargar(6)
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h = Worksheets("Niveles_FlujosCash")
    Set h2 = Worksheets("Matriz")
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        Call agregar(ComboBox1, h.Cells(i, "A"), h.Cells(i, "G"))
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String, cod As String)
'Por.Dante Amor
    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
                combo.List(combo.ListCount - 1, 1) = cod
                Exit Sub 'Es menor, lo agrega antes del comparado
        End Select
    Next
    combo.AddItem dato 'Es mayor lo agrega al final
    combo.List(combo.ListCount - 1, 1) = cod
End Sub
Sub cargar(ini)
'Por.Dante Amor
    For i = ini To 6
        Controls("ComboBox" & i).Clear
    Next
    For i = 2 To h.Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To ini - 1
            If h.Cells(i, j) = Controls("ComboBox" & j) Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
        If igual Then Call agregar(Controls("ComboBox" & ini), h.Cells(i, ini), h.Cells(i, ini + 6))
    Next
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas