¿Cómo borrar los registros de una tabla en Excel usando Find y Findnext? ¿Otra forma de hacerlo?

Tengo una tabla llamada TablaAuditoriasEvaluacion y quiero borrar todos los registros que coincidan con "2EDM" en la columna 1

Usando Find y FindNext los encuentro pero a la hora de borrar ... No borra todos... ¿dónde tengo el fallo?.

Os paso el código... O si hay otro método también me vale... Gracias

Sub Borradoentabla()
Dim EncontradoEnFila As Range
Dim HojaDatos As Worksheet
On Error Resume Next
Set HojaDatos = ThisWorkbook.Sheets("MasterDATA")
Set Tabla = HojaDatos.ListObjects("TablaAuditoriasEvaluacion")
Set EncontradoEnFila = Tabla.DataBodyRange.Columns(1).Find("2EDM", Lookat:=xlWhole)
If EncontradoEnFila.Row <> 0 Then
fila = EncontradoEnFila.Row
Do
Set EncontradoEnFila = Tabla.DataBodyRange.Columns(1).FindNext(EncontradoEnFila)
Debug.Print EncontradoEnFila.Row
Tabla.ListRows(EncontradoEnFila.Row - 1).Delete
Loop While Not EncontradoEnFila Is Nothing And EncontradoEnFila.Row <> fila
End If
End Sub

1 respuesta

Respuesta
3

Cuando utilizas el método Find y FindNext, excel almacena en memoria las siguientes referencias, pero cuando eliminas una fila, como es este el caso, excel pierde la referencia de la fila, porque la fila fue eliminada y la siguiente fila se recorrió, entonces genera un error; supongo que por eso tienes la instrucción On Error Resume Next.

Puedes utilizar el siguiente método, filtra las filas por el valor y luego elimina todas las filas filtradas, además de no necesitar la instrucción On Error, este método es más rápido, ya que en una sola ejecución elimina todas las filas.

Sub Borradoentabla_2()
  Dim HojaDatos As Worksheet
  Application.ScreenUpdating = False
  Set HojaDatos = ThisWorkbook.Sheets("MasterDATA")
  With HojaDatos.ListObjects("TablaAuditoriasEvaluacion").Range
    .AutoFilter Field:=1, Criteria1:="2EDM"
    .Offset(1).EntireRow.Delete
    .AutoFilter Field:=1
  End With
End Sub

Existen otras maneras de eliminar, pero considero que esta es la más efectiva. 

Por cierto, tienes pendiente valorar esta respuesta:

¿Crear procedimiento para vaciar los items de un listbox de cualquier formulario?

[Ayúdame con eso, no dejes respuestas sin valorar, si todavía tienes dudas, puedes comentar y con gusto te apoyo.

Dante mira como esta la tabla

Y al aplicar tu codigo se queda asi

Necesito borrar estos 3 registros.

Necesito que la tabla vuelva a su estado original , es decir que muestre el resto de registros.

Gracias por tu aporte...una vez mas.

Un saludo

Eso hace la macro.

Una línea del código es para borrar

Offset(1). EntireRow.Delete

Y la línea que sigue restablece la tabla.

.

Puedes compartir tu archivo en google drive o enviarme tu archivo a mi correo

[email protected] 

Te acabo de enviar al correo, un video explicativo de como esta el código y el libro.

Gracias Dante

Veo que tienes otras tablas en tu hoja, entonces mi macro elimina toda la fila y no debe ser así.

Prueba de la siguiente manera. Leer los registros de abajo hacia arriba e ir borrando los que cumplan la condición:

Sub TablaAuditoriadeEvolucionDpto_Haga_clic_en()
  Dim HojaDatos As Worksheet
  Dim tbl As ListObject
  Application.ScreenUpdating = False
  Set HojaDatos = ThisWorkbook.Sheets("MasterDATA")
  Set tbl = HojaDatos.ListObjects("TablaAuditoriasEvaluacion")
  '
  For i = tbl.ListRows.Count To 1 Step -1
    If tbl.DataBodyRange(i, 1) = "2EDM" Then
      tbl.ListRows(i).Delete
    End If
  Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas