Mostrar lista de registros y modificarlos individualmente

Para Dante Amor

Maestro, tengo un problema q ni siquiera logro llevarlo a la idea mucho menos al código. Tengo una base de datos de trabajadores, todo modificable en un formulario de registro, obviamente puedo agregar, modificar o eliminar de manera individual cada ficha del trabajador. Pero aquí viene mi problema, necesito crear un formulario para realizar algunos cambios "masivos". Aquí va mi idea. Que al abrir el formulario, ya sea de forma automática o con boton, me muestre todos los usuarios que en la columna B tengan valor "SI" (activo), y al lado de ese nombre mostrar dos textbox, uno para introducir (modificar) la cantidad de días trabajados y el otro para modificar el valor de un posible anticipo y asi poder hacer esa modificación masiva pero individual a la vez en una sola pantalla o form.

1 Respuesta

Respuesta
1

H o l a:

La idea sería cargar todos los registros en un listbox que en la columna B tengan "SI", pero también tienes que cargar en el listbox el número de fila de cada registro, esto para saber cuál registro se cargó.

Luego capturas tus datos en los textbox, después en un commandbutton vas leyendo registro por registro del listbox, tomas el número de fila que estará en el listbox y ya sabes que registro de excel modificar, entonces vas modificando ese registro en la hoja de excel y te pasas al siguiente registro del listbox.

Si tienes dudas de cómo hacerlo, envíame tu archivo con tu formulario y adapto el código.

Mi correo [email protected]

sal u dos

Correo enviado... (Y)

Te anexo un par de macros, una para cargar los nombres en el listbox y otra para saber cuál es el registro que seleccionaste:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un nombre"
        Exit Sub
    End If
    MsgBox "El registro seleccionado está en la fila: " & ListBox1.List(ListBox1.ListIndex, 1)
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h = Sheets("personal")
    For i = 2 To h.Range("AD" & Rows.Count).End(xlUp).row
        If h.Cells(i, "AD") = "SI" Then
            ListBox1.AddItem h.Cells(i, "B")
            ListBox1.List(ListBox1.ListCount - 1, 1) = i
        End If
    Next
End Sub

sal u dos

Maestro... ¿pero cómo hago para escribir de vuelta?

La idea es que al seleccionar el item del listbox, el textbox1 lea la columna "am", el textbox2 lea la columna "an" y el textbox3 la columna "ao". Entonces al pinchar sobre el botón, poder actualizar la información puesta en los textbox, en las mismas columnas... en los mismos registros. La idea es poder hacer una actualización individual pero masiva por llamarlo de alguna manera, de solo esos tres campos. Para no ir al formulario de ficha personal y actualizar de uno por uno.

Saludos!

De cuál hoja, en el archivo que me enviaste, en la hoja "personal" las columnas AM, ¿AN y AO están vacías?

actualmente si, pero esas columnas corresponen a esos nuevos 3 campos, q igual los tendrá el formulario de ficha personal.

Saludos!

Te anexo la macro para leer y actualizar los datos en la misma hoja "personal"

Private Sub CommandButton1_Click()
'Por.Dante Amor
    If ListBox1.ListIndex = -1 Then
        MsgBox "Selecciona un nombre"
        Exit Sub
    End If
    Set h = Sheets("personal")
    fila = ListBox1.List(ListBox1.ListIndex, 1)
    h.Cells(fila, "AM") = TextBox1
    h.Cells(fila, "AN") = TextBox2
    h.Cells(fila, "AO") = TextBox3
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    MsgBox "Registro Actualizado"
End Sub
'
Private Sub ListBox1_Click()
'Por.Dante Amor
    Set h = Sheets("personal")
    fila = ListBox1.List(ListBox1.ListIndex, 1)
    TextBox1 = h.Cells(fila, "AM")
    TextBox2 = h.Cells(fila, "AN")
    TextBox3 = h.Cells(fila, "AO")
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    Set h = Sheets("personal")
    For i = 2 To h.Range("AD" & Rows.Count).End(xlUp).row
        If h.Cells(i, "AD") = "SI" Then
            ListBox1.AddItem h.Cells(i, "B")
            ListBox1.List(ListBox1.ListCount - 1, 1) = i
        End If
    Next
End Sub


':)
'S aludos. D a n t e   A m o r . R ecuerda valorar la respuesta. G racias
':)R ecuerda valorar la respuesta. G r a c i a s

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas