VBA Formularios no toma los datos de excel y no valida

No tengo 1 formulario que toma datos del excel completa bien los combobox, pero no los textbox (son dependientes entre si) de acuerdo a toque elija en el primero combo ira cargando en los siguientes los datos que corresponden, pero no sé como ampliarlo para que cargue unos textbox que también son dependiente de los combobox

Private Sub UserForm_Activate()
'On Error GoTo error_usuario
Sheets("Registro").Select
OB_Realizada = True
    Set h1 = Sheets("Base de datos")
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        agregar ComboBox1, h1.Cells(i, "A")
    Next
End Sub
Sub agregar(combo As ComboBox, dato As String)
    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
'
Sub cargar(ini)
    For i = ini To 3
        Controls("ComboBox" & i).Clear
    Next
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To ini - 1
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j))
            If h1.Cells(i, j) = valor Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
    Next
End Sub
Private Sub ComboBox3_Change()
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row
        For j = 1 To 3
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j))
            If Cells(i, j) = valor Then
                igual = True
            Else
                igual = False
                Exit For
            End If
        Next
        If igual Then Exit For
    Next
End Sub

Y mi tabla ahora es así

Cómo hago que los campos Tamaño, Clasificación y Zona, ¿se cargan en los textbox?

Respuesta
2

Como no hay ninguna imagen que aclare dónde están ubicados los datos relacionados con el combo, voy a imaginar una tabla de 3 col donde la primera contiene los datos presentados en el combo.

Entonces, el evento Change del combo en cuestión (en mi ejemplo Combobox1) tendrá éste código para rellenar los textbox con los datos de ese registro.

Private Sub ComboBox1_Change()
'x Elsamatilde
'solo se realiza la búsqueda si el control tiene algún valor
If ComboBox1 = "" Then Exit Sub
Set busco = ActiveSheet.Range("A:A").Find(ComboBox1, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then
'si encuentra el dato vuelca el resto de los campos en los textbox
    x = busco.Row
    TextBox1 = Range("B" & x)
    TextBox2 = Range("C" & x)
    'y así con el resto de los campos
'si no encuentra el dato deja los controles vacios
    TextBox1 = "": TextBox2 = ""
 End If
End If

Sdos y no olvides valorar la respuesta.

Elsa

PD) En el video 7 de mi canal encontrarás más ejemplos de listas dependientes.

Gracias, tienes razón no queda la imagen, con las subrutinas que puse en el post, logro cargar mis tres combobox (del uno al 3) con los datos del excel (columnas de la A a la C) hoja OrigendeDatos

pero no logro que se cargan los TextBox de Tamaño, Clasificación y Zona (TBTamano, TBClasificacion y TBZona), en mi UserForm llamado Agregar

Espero haber sido ma claro, vi tus ejemplo, y como ya tengo un código, no supe cómo editarlo, lo he reutilizado, pero siempre sólo con 3 columnas, esta es la única vez que he tenido que ampliar el rango

No dejaste el código que alimenta los otros 2 combos.

Pero con la misma lógica que seguramente tiene el código de tu combo1 para alimentar el 2 y el 2do para alimentar el 3ro, vas a encontrar el valor de la 4ta col y así en el resto.

Si no lo podés armar deja aquí los códigos que faltan para poder armarte el resto.

Sdos!

este es mi código completo

y la tabla es de la columna A a F

Private Sub UserForm_Activate() 
'On Error GoTo error_usuario 
Sheets("Registro").Select 
OB_Realizada = True 
    Set h1 = Sheets("Base de datos") 
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row 
        agregar ComboBox1, h1.Cells(i, "A") 
    Next 
End Sub 
'Miguel Ángel Razquin Noblecilla 
Sub agregar(combo As ComboBox, dato As String) 
    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 
' 
Sub cargar(ini) 
    For i = ini To 3 
        Controls("ComboBox" & i).Clear 
    Next 
    For i = 2 To h1.Range("A" & Rows.Count).End(xlUp).Row 
        For j = 1 To ini - 1 
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _ 
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j)) 
            If h1.Cells(i, j) = valor Then 
                igual = True 
            Else 
                igual = False 
                Exit For 
            End If 
        Next 
    Next 
End Sub 
Private Sub ComboBox3_Change() 
    For i = 2 To Range("A" & Rows.Count).End(xlUp).Row 
        For j = 1 To 3 
            valor = IIf(IsNumeric(Controls("ComboBox" & j)), _ 
                Val(Controls("ComboBox" & j)), Controls("ComboBox" & j)) 
            If Cells(i, j) = valor Then 
                igual = True 
            Else 
                igual = False 
                Exit For 
            End If 
        Next 
        If igual Then Exit For 
    Next 
End Sub 
Private Sub ComboBox1_Change() 
    cargar 2 
End Sub 
' 
Private Sub ComboBox2_Change() 
    cargar 3 
End Sub 

lo pegue, como ves carga los 3 combobox, pero la verdad no entiendo la lógica para modificarlo.

Lo único que no pegué fue el botón que guarda nuevos campos, Elsa te agradezco mucho la paciencia y la ayuda

No, no carga los 3 combos. Estoy recreando tu ejemplo pero evidentemente con palabras solamente no se puede hacer el seguimiento. El código enviado solo carga el combo1.

Tendrás que enviarme el libro o por lo menos esa hoja + el formulario para ajustarlo.

Mis correos aparecen en la imagen o en mi sitio:

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas