Cargar datos en txt desde base de datos Excel, dependiendo del valor en una celda

Haz tu pregunta - Todoexpertos.com

Buenas tardes expertos

Cordial saludo, de antemano muchas gracias por su ayuda

Tengo un formulario, el cual tiene 4 filas y 3 columnas, a las cuales les he colocado el nombre de la columna y el numero de la fila, mi consulta es, como puedo cargar los datos con un bucle dependiendo de la fila, como se muestra en la siguiente imagen

He intentado algo asi,

For x = 2 To hoja1.Range("A" & Rows.Count).End(xlUp).Row
    If hoja1.Cells(x, 1).Value = Val(txtcaso) Then
       fila = x

                For y = 1 To 4
                   If hoja1.Cells(fila, 2).Value = y Then

                        txtresponsable & y = hoja1.Range(3 & fila).Value

                         txtfecha & y = hoja1.Range(4 & fila).Value

                        txtrealizado & y = hoja1.Range(5 & fila).Value

                   end if

                next

    end if

next

Pero me sale error declarando el nombre del txt, es decir se que se puede hacer uno por uno, pero como puedo hacerlo para que no sea tan largo y dispendioso el código.

1 respuesta

Respuesta
2

H o l a:

Te anexo el código para cargar los textbox. También te puse una macro para limpiar los textbox, en esa rutina se aprecia cómo se puede utilizar el nombre del textbox y una variable.

Cambia en la macro "Hoja2" por el nombre de tu hoja.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("Hoja2")
    Set r = h.Columns("A")
    '
    Call LimpiarTxt
    If IsNumeric(txtcaso) Then caso = Val(txtcaso) Else caso = txtcaso
    Set b = r.Find(caso, lookat:=xlWhole)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            n = n + 1
            If n = 5 Then Exit Do
            If IsNumeric(h.Cells(b.Row, "B")) And _
                h.Cells(b.Row, "B") >= 1 And h.Cells(b.Row, "B") <= 4 Then
                m = Val(h.Cells(b.Row, "B"))
                Controls("txtresponsable" & m) = h.Cells(b.Row, "C")
                Controls("txtfecha" & m) = h.Cells(b.Row, "D")
                Controls("txtrealizado" & m) = h.Cells(b.Row, "E")
            End If
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
End Sub
'
Sub LimpiarTxt()
'Por.Dante Amor
    For i = 1 To 4
         Controls("txtresponsable" & i) = ""
         Controls("txtfecha" & i) = ""
         Controls("txtrealizado" & i) = ""
    Next
End Sub

Lo que te recomiendo en este caso, en lugar de utilizar textbox por actividad, pongas toda la información en un listbox, de esta manera, si llegaras a tener 5 o más actividades no tiene que estar creando más textbox y modificando la macro.

Te presento el ejemplo para utilizar el listbox:

El código para cargar los datos en el listbox es el siguiente:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("Hoja2")
    Set r = h.Columns("A")
    '
    ListBox1.Clear
    ListBox1.ColumnCount = 4
    If IsNumeric(txtcaso) Then caso = Val(txtcaso) Else caso = txtcaso
    Set b = r.Find(caso, lookat:=xlWhole)
    If Not b Is Nothing Then
        ncell = b.Address
        Do
            ListBox1.AddItem h.Cells(b.Row, "B")
            ListBox1. List(ListBox1.ListCount - 1, 1) = h. Cells(b.Row, "C")
            ListBox1. List(ListBox1.ListCount - 1, 2) = h. Cells(b.Row, "D")
            ListBox1. List(ListBox1.ListCount - 1, 3) = h. Cells(b.Row, "E")
            Set b = r.FindNext(b)
        Loop While Not b Is Nothing And b.Address <> ncell
    End If
End Sub

':)
':)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas