Modificar elemento de ListBox filtrado por búsqueda y guardar cambios en el libro en la fila respectiva

Hace algo de tiempo hice la siguiente consulta...

Tengo una macro con un formulario de búsqueda, dicha búsqueda la arroja en un Listbox, al seleccionar un elemento del Listbox y picar en un botón "Modificar" me carga un nuevo formulario con todos los datos concernientes al Listbox seleccionado, mi problema esta en que luego de tener los datos en el nuevo formulario y hacerles las respectivas modificaciones... No se como hacer para que me actualice los datos en la base de datos, justo en el Listbox que tenia seleccionado...

La misma fue atendida por Dante Amor y su respuesta fue la siguiente

Private Sub C_ButtonActualizarCampos_Click()
'Por.Dante Amor
    Dim f As Integer
    f = Formulario_BuscarRegistro.ListBoxRESULTADOS.ListIndex + 2
    Cells(f, "A") = TextBoxIDENTIFICACION
    Cells(f, "B") = TextBoxP_NOMBRE
    Cells(f, "C") = TextBoxS_NOMBRE
    Cells(f, "D") = TextBoxP_APELLIDO
    Cells(f, "E") = TextBoxS_APELLIDO
    Cells(f, "F") = TextBoxNoCAJA
    Cells(f, "G") = TextBoxOBSERVACIONES
End Sub

Al pulsar al botón Actualizar me guarda los datos en el registro seleccionado tal como lo pedía, ahora bien, por medio del siguiente código hago una búsqueda que muestra sus resultados en el mismo ListBox

Sub CBtn_BuscarREGISTROS_Click()
    Dim Filas As Integer
    Dim Columna As Integer
    Dim NoResults As Boolean
    Dim j As Byte
    Dim i As Byte
    Sheets("Hoja1").Select
    On Error GoTo Errores
    If Trim(Me.TextBoxBUSQUEDA.Value = "") Then GoTo Errores
    If Trim(Me.cmbEncabezado Is Nothing) Then GoTo Errores
    Filas = Range("A1").CurrentRegion.Rows.Count
    Columna = Me.cmbEncabezado.ListIndex
    NoResults = False
    j = 1
    For i = 2 To Filas
        If LCase(Cells(i, j).Offset(0, CInt(Columna)).Value) Like "*" & LCase(Me.TextBoxBUSQUEDA.Value) & "*" Then
            ' Limpia el cuadro de lista para mostrar los nuevos resultados
            ListBoxRESULTADOS.Clear
            ' Rellena el listbox con los resultados de la busqueda
            Me.ListBoxRESULTADOS.AddItem Cells(i, j)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 1) = Cells(i, j).Offset(0, 1)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 2) = Cells(i, j).Offset(0, 2)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 3) = Cells(i, j).Offset(0, 3)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 4) = Cells(i, j).Offset(0, 4)
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 5) = Cells(i, j).Offset(0, 5)
            'Agregar número de fila
            Me.ListBoxRESULTADOS.List(Me.ListBoxRESULTADOS.ListCount - 1, 6) = i
            Exit Sub
        Else
            NoResults = True
        End If
    Next i
    ' Si la busqueda no produce resultados lanza este mensaje y fija el foco en la casilla de busqueda
    If NoResults = True Then
        MsgBox "Su búsqueda no produjo ningún resultado con el filtro seleccionado." & vbCrLf & _
                "Intente nuevamente con otro filtro de búsqueda u otro dato.", vbCritical, "Registro no encontrado"
        TextBoxBUSQUEDA.Value = ""
        TextBoxBUSQUEDA.SetFocus
    End If
    Exit Sub
Errores:
    MsgBox "Compruebe que seleccionó un filtro para la búsqueda" & vbCrLf & _
            "y/o definió un dato a buscar e inténtelo nuevamente", vbCritical, "Error de usuario"
End Sub

Cuando se hace la búsqueda y seleccionó un ítem para modificar-lo, no me actualiza el ítem seleccionado, en su caso, modifica el primer registro de la hoja... 

1 Respuesta

Respuesta
1

Tu macro de búsqueda llena el listbox y le agrega el nro de fila en la col 6ta.

Entonces al seleccionar algún item de la lista tendrás que mover los datos de cada columna a los textbox ... en esa macro además debes guardar el dato de la 6ta col en la variable 'f' y 'marcar' alguna variable para indicarle que estás en proceso de modificación (x ej modi) .

Así para pasarlos a la hoja puedes utilizar la misma macro haciendo la evaluación de la fila.

Private Sub C_ButtonActualizarCampos_Click()
'modificada x Elsamatilde
if modi = 1 then    'estoy modificando
   f = ListBoxRESULTADOS.List(ListBoxRESULTADOS.Listindex, 6)
else
   f = Formulario_BuscarRegistro.ListBoxRESULTADOS.ListIndex + 2
end if
 'la variable f tiene el valor de la 6ta col del listbox  
    Cells(f, "A") = TextBoxIDENTIFICACION
    Cells(f, "B") = TextBoxP_NOMBRE
    Cells(f, "C") = TextBoxS_NOMBRE
    Cells(f, "D") = TextBoxP_APELLIDO
    Cells(f, "E") = TextBoxS_APELLIDO
    Cells(f, "F") = TextBoxNoCAJA
    Cells(f, "G") = TextBoxOBSERVACIONES
End Sub

Elsa, Saludos...

Pues ingrese el código que me enviaste pero sigo teniendo problema, si no es demasiado pedir, te anexo un enlace con el archivo para que lo revises...

Gracias de antemano

Teniendo otro formulario para actualizar los datos debes nombrar la variable 'modi' como pública al inicio de un módulo, por ej. en 'varios'.

Public modi as byte

Luego en el botón Modificar agregar la línea en negrita:

Private Sub CBtn_Modificar_Click()

If Me.ListBoxRESULTADOS.ListIndex > -1 Then
modi = 1
Formulario_Actualizar.Show
Else
MsgBox "No se ha elegido ningún registro", vbExclamation, "Error de usuario"
End If
End Sub

Y en el formulario Actualizar estos serían los cambios:

Private Sub C_ButtonActualizarCampos_Click()
Dim Fila As Integer
If modi = 1 Then
Fila = Formulario_BuscarRegistro.ListBoxRESULTADOS.List(Formulario_BuscarRegistro.ListBoxRESULTADOS.ListIndex, 6)
Else
Fila = Formulario_BuscarRegistro.ListBoxRESULTADOS.ListIndex + 2
End If

'siguen instrucciones hasta antes del Unload

modi =1

Unload me

End Sub

Si necesitas el libro con los ajustes podes solicitarlo a alguno de los correos que aparecen en el encabezado de mi sitio.

PD) Note que solicitando maria solo aparece 1 registro cuando tiene 2... debes revisar este detalle.

Y si no selecciono ningún dato y presiono 'Modificar' aparece un mensaje de windows y el equipo se plantó ;( ;(

Que tal Elsa, escribí a uno de tus correos, da un vistazo, estaré grandemente agradecido... respecto al tema del filtro de búsqueda, no se porque no me funciona en ese archivo, ya que con otros libros me va a la perfección... 

Alguna sugerencia?

¡Gracias! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas