Macro para eliminar fila especificando el valor de una celda

He creado una macro para eliminar filas en la que se especifica mediante msgbox el valor de la celda a eliminar que estará en la columna B2. Cuando pregunte que celda eliminar, al poner por ejemplo 'papel' borrará la fila entera cuya columna 2 tenga papel. Todo me funciona bien salvo que no haya datos aún en la tabla, en cuyo caso me da error. Lo que tengo es esto:

Sub Eliminar_Reclamacion()

Worksheets("Registro_anual").Unprotect ("contraseña")

Valor = InputBox("¿que quieres eliminar?")

Set Celda = Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row).Find(Valor, LookIn:=xlValues)

If Not Celda Is Nothing Then Rows(Celda.Row).Delete

If Range("B2").Value = 0 Or Range("B2").Value = "" Or Range("B2").Value = Empty Then

End If

ActiveSheet.Protect Password:="wartia", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True

End Sub

¿Qué puedo hacer para que no me dé error cuando aún la tabla no tiene datos y soy a eliminar?

2 Respuestas

Respuesta
1

 [hola 

va la macro

Sub Eliminar_Reclamacion()
    Worksheets("Registro_anual").Unprotect ("contraseña")
    valor = InputBox("¿que quieres eliminar?")
    If valor = "" Then Exit Sub
    '
    Set Celda = Range("B:B").Find(valor, Lookat:=xlWhole)
    If Not Celda Is Nothing Then
        Rows(Celda.Row).Delete
    Else
    MsgBox "no existe"
    End If
End Sub
Respuesta

Es correcta la macro de Adriel... pero como me ha llegado una sugerencia del sitio dejo aquí otra opción.

Se controla si la hoja no tiene datos, si el inputbox queda vacío y recién entonces desprotege la hoja y sigue el resto protegiéndola nuevamente al final:

Sub Eliminar_Reclamacion()
'x Elsamatilde
'si no hay datos en la tabla
    If Range("B" & Rows.Count).End(xlUp).Row < 3 Then Exit Sub
'si no ingresa campo de búsqueda
    valor = InputBox("¿que quieres eliminar?")
    If valor = "" Then Exit Sub
'todo correcto: se desprotege la hoja
    Worksheets("Registro_anual").Unprotect ("wartia")
    Set Celda = Range("B:B").Find(valor, Lookat:=xlWhole)
    If Not Celda Is Nothing Then
        Rows(Celda.Row).Delete
    Else
        MsgBox "no existe"
    End If
'volver a proteger
    ActiveSheet.Protect Password:="wartia", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True
End Sub

Observa que en tu macro dejaste 2 claves diferentes..... opté por la última.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas