Botón Eliminar me da Error

Estoy trabajando con un formulario siguiendo un video en Excel y no puedo resolver porque al querer Eliminar un elemento del LisBox no me lo permite, esta es la Macro.

Private Sub BT_ELIMINAR_Click()

valor_buscado = txt_id.Value
datos = txt_articulo.Value & " " & txt_precio.Value

On Error Resume Next
If lista.ListIndex = -1 Then
MsgBox "Seleccione una fila", vbInformation, "los panes de Lola"

Else
respuesta = Application.InputBox("Realmente quiere ELIMINAR la fila: " & datos, "Ingrese Clave")

If respuesta = "123" Then
Set fila = Sheets("Productos").Range("B:B").Find(valor_buscado, lookat:=xlWhole)
linea = fila.Row
Range("B" & linea).EntireRow.Delete
End If
End If

End Sub

Private Sub txt_id_Change()

Dim id As Integer
id = txt_id.Value

Me.txt_articulo = Application.WorksheetFunction.VLookup(id, Sheets("Productos").Range("B:D"), 2, 0)
Me.txt_precio = Application.WorksheetFunction.VLookup(id, Sheets("Productos").Range("B:D"), 3, 0)

End Sub

1 respuesta

Respuesta
2

Según el código que dejaste, en ningún momento parece señalarse qué elemento de la lista se debiera eliminar.

Si lo que intentas, es refrescar el Listbox luego de eliminar un registro de la hoja, entonces debes volver a cargarlo. Esto dependerá de cómo se alimenta esa lista... si desde la propiedad RowSource o fila a fila...

Aclarame un poco más qué intentas eliminar y cómo se alimenta tu lista.

Hola, por favor necesitaría saber como puedo subir el Archivo a este lugar para que puedan deducir el error que mencionas, por otro lado trato Elsa de tomar nota de tu pagina "Botón Agrega" y "Botón Modificar, Eliminar" y compáralo con lo que tengo y ver donde esta el Error.

O de lo contrario si puedo mandarlo a alguna casilla de Email.

Saludos

Juan Carlos

Mis correos aparecen en sección CONTACTOS de la web que dejo al pie. Podrías usar la de cibersoftPUNTOarg de gmail.com

Hola ya se lo envié desde mi Email

[email protected]

Asunto : Botón Eliminar me da Error

Saludos

Juan Carlos

El formulario ‘miformulario’ tiene problemas varios. Y como tenés otro userform como copia de éste, también tendrás que arreglarlo en los mismos puntos.

  • Se repiten las instrucciones del evento Initialize en Activate. Podrías declarar todas las propiedades directamente en la barra de Propiedades evitándote así líneas de código. Si querés hacerlo por código entonces solamente en el evento Initialize.
  • Se vuelve a asignar 3 col a la lista en BT_AGREGAR_Click() cuando esto ya fue instruído en los eventos Initialize y Activate. (Ver pto anterior)
  • No hay control de contenidos (ver importe en imagen)

  • El orden del Enter o Tab es caótico. Arreglar la propiedad TabIndex de cada control.
  • No se inhabilitan los botones de tareas (Registrar, Editar, Eliminar) mientras se está ejecutando una de ellas. Esto hace que se pueda crear cuando se intentó modificar. Incluso puedo crear registros vacíos…. O intentar eliminar (sin control de fila).

  • Las consultas de confirmación no se hacen con InputBox sino con MsgBox. Luego se solicita clave.
sino = MsgBox("¿Confirmas ELIMINAR la fila " & datos & "?", vbQuestion + vbYesNo)
If sino <> vbYes Then Exit Sub
    respuesta = Application.InputBox("Ingresa tu clave de usuario para eliminar registro.", "Ingrese Clave")
    If respuesta = "123" Then
  • Al utilizar la función FIND en una búsqueda, no se tiene que dar por asumido que la búsqueda fue exitosa. En especial si lo que se ingresa es por tipeo y no por selección desde un desplegable.

        Set fila = Sheets("Productos").Range("B:B").Find(valor_buscado, lookat:=xlWhole)

        linea = fila.Row      'error si el reg no fue encontrado. Ver video N° 11

Set fila = Sheets("Productos").Range("B:B").Find(valor_buscado, lookat:=xlWhole)
if fila is nothing Then 
    Msgbox "No se encontró el registro" :Exit sub
End If
        linea = fila.Row
  • Luego de eliminar un registro se ejecuta el evento Change del control txt_id. Pero ahora este control está vacío. Debes evaluar esta condición de vacío para no ejecutar el resto de las instrucciones.
Private Sub txt_id_Change()
If txt_id.Value = 0 Then Exit Sub

  • Al eliminar un registro debes refrescar la lista:
        Range("B" & linea).EntireRow.Delete
        lista.RowSource = "tblProductos"       'refrescar la lista
    End If

Seguramente habrá otros problemas pero no me detuve al resto de los procesos. Cuando finalices con los arreglos podrás dejar nuevas consultas aquí en el foro.

* Te invito a mirar los siguientes videos de mi canal. Enlace al pie.

N° 11: mejoras en el código. Dejar de utilizar Me, control de búsqueda exitosa, etc.

N° 27 y 28: Completo ejemplo de registro en base.

N° 25 + otros que allí se indican: Uso correcto de Find, con control de resultados.

N° 36: Filtro dinámico con lista en Userform.

Siguiendo con la TBProductos cuando inicializo en el Lisbox algún producto directamente surge este error

Private Sub txt_id_Change()
Dim id As Integer

If txt_id.Value = 0 Then Exit Sub

Range("B" & linea).EntireRow.Delete
lista.RowSource = "tblProductos" 'refrescar la lista

End Sub

Saludos

Juan Carlos

Estás mezclando los códigos:

En esta macro solo agrega el control de vacío, el resto sigue igual.
Private Sub txt_id_Change()
Dim id As Integer
If txt_id.Value = 0 Then Exit Sub
'sigue tu código
End Sub  

Y en la macro del botón Eliminar debes agregar el refresco de la tabla:

    respuesta = Application.InputBox("Ingresa tu clave de usuario para eliminar registro.", "Ingrese Clave")
    If respuesta = "123" Then
        Set fila = Sheets("Productos").Range("B:B").Find(valor_buscado, lookat:=xlWhole)
        linea = fila.Row
        Range("B" & linea).EntireRow.Delete
        lista.RowSource = "tblProductos"        'agregar
    End If
End If
End Sub

Si te quedan más problemas a resolver, por favor marca una valoración aquí para cerrar esta parte considerando que te resolví 9 puntos en la misma consulta.

Luego podrás publicar otras nuevas en el tablón.

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas