Problema con Cells.Find

Hola, agradecería mucho que me ayudaran con una macro que no me funciona. La idea es buscar en una hoja ("BD") todos los datos alojados en otra hoja ("LISTA") y borre todas las filas que las contengan. No consigo que Find encuentre nada..... El código sería algo así:

Private Sub CommandButton1_Click()
On Error Resume Next
Dim celda As String
Application.ScreenUpdating = False
Sheets("LISTA").Select
ActiveSheet.Range("A1").Select
Do While Not IsEmpty(ActiveCell)
celda = ActiveCell
Sheets("BD").Select
[A:A].Find(What:=celda, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Selection.EntireRow.Delete
Sheets("LISTA").Select
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub

Mil gracias, me tiene loco....!!!

1 Respuesta

Respuesta
1

Mejor utiliza la función SET:

Set busco = ActiveSheet.range("A:A").find(celda, lookin:=xlvalues, lookat:=xlwhole)

if not busco is nothing then celda.entirerow.delete


Luego de eso volvés a tu hoja Lista

Sdos

Elsa

PD) Últimos días para aprovechar la promo en manuales Excel 2007-2010

Gracias Elsa por tu pronta respuesta.

El código me dá un Error de compilación: Calificador no válido, señalando la palabra celda (que es la variable que utilizo para la frase a buscar) que se encuentra en la línea celda.entirerow.delete.

He probado sustituirla por "Selection" pero me borra tola da tabla.

Ya me comentas si es posible corregirlo.

Muchas gracias de todas formas.

Un saludo

lytryx.

Te dejo la rutina completa por si quizás no pegaste bien mis líneas:

Private Sub CommandButton1_Click()
On Error Resume Next
Dim celda As String
Application.ScreenUpdating = False
Sheets("LISTA").Select
ActiveSheet.Range("A1").Select
Do While Not IsEmpty(ActiveCell)
celda = ActiveCell.Value
Sheets("BD").Select
Set busco = ActiveSheet.Range("A:A").Find(celda, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then celda.EntireRow.Delete
Sheets("LISTA").Select
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub

Observa que definiste la variable 'celda' como String, la col A debe tener valores string también.

Quizás sea recomendable que en lugar de buscar en todo A:A, le acotes el rango a solo los datos: Range("A3:A1000") x ejemplo.

Y por último siempre es recomendable no utilizar palabras que puedan ser usadas por Excel, por ej CELDA es el nombre de una función en español... aquí no debiera darte problemas pero es buena costumbre no utilizarlas.

Comentame si ahora quedó resuelto.

Gracias Elsa, ya me funciona, solo le he tenido que cambiar un pequeño detalle, en la línea celda.EntireRow.Delete he sustituido "celda" ("familia" siguiendo tu consejo) por "busco" y todo ok.

Le he aumentado la funcionalidad para que me busque a todos los registros existentes y me los borre mientras encuentre alguno. El código me ha quedado tal que así:

Private Sub CommandButton1_Click()
On Error Resume Next
Dim familia As String
Application.ScreenUpdating = False
Sheets("LISTA").Select
ActiveSheet.Range("A1").Select
Do While Not IsEmpty(ActiveCell)
familia = ActiveCell.Value
Sheets("BD").Select
Set busco = ActiveSheet.Range("A3:A1000").Find(familia, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then busco.EntireRow.Delete
sigue = familia
Do While Not sigue Is Nothing
Set sigue = ActiveSheet.Range("A3:A1000").Find(familia, LookIn:=xlValues, lookat:=xlWhole)
If Not sigue Is Nothing Then sigue.EntireRow.Delete
Loop
Sheets("LISTA").Select
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
End Sub

Si ves que se puede mejorar te lo agradeceré.

Un saludo y muchas gracias.

lytryx

Si hace lo que tiene que hacer está perfecto. Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas