Cómo comprobar que en una selección de celdas no se seleccionó ciertas filas en excel?

Estimad@s

Tengo el siguiente código para eliminar filas de una planilla. Pero hay una restricción:

Todas las filas anteriores a la fila 43 no pueden eliminarse ni las que estén después de la última fila.

 ActiveSheet. Unprotect "PWD12345"
    Application.ScreenUpdating = False
    Dim UltimaFila As Integer
    UltimaFila = Range("A1").End(xlDown).Row '(para la última celda con datos)
    Dim fila As Integer
    fila = ActiveCell.Row
    If fila < 43 Then
        MsgBox ("Esta fila no se puede eliminar.")
        Sheets("Planilla de Costos").Protect "PWD12345", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
        Exit Sub
    ElseIf fila >= UltimaFila Then
        MsgBox ("Esta fila no se puede eliminar.")
        Sheets("Planilla de Costos").Protect "PWD12345", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
        Exit Sub
        End If
    Dim Resp As Byte
    Resp = MsgBox("Está seguro que desea eliminar?", _
    vbQuestion + vbYesNo, "Borrar Fila")
    If Resp = vbYes Then
    Selection.EntireRow.Delete
    Else
    Exit Sub
    End If
Application.ScreenUpdating = True

El tema está en que al seleccionar con el puntero me toma la activecell la primera que marqué con el puntero, entonces marqué una celda dentro del rango permitido pero la selección completa incluye filas que fuera de ese rango... Las elimina!

Agradecido por su ayuda.

1 Respuesta

Respuesta
1

La verdad es que no entiendo. ¿Puedes poner una imagen que muestre el problema?

Un consejo: En un IF, si vas a ejecutar una misma acción para dos o más posibles condiciones, no tienes que usar un ElseIf. Puedes usar And y Or.

En tu caso:

If fila < 43 Or fila >= UltimaFila Then
   'bla bla
End If

Andy

Gracais por lo del Or y And, se pueden incuir más de una ves? Or bla Or bla Or.....

Con respecto a lo otro ya lo solucioné con lo siguiente:

 Dim Fil_I As Long, Fil_F As Long
 Fil_I = Selection.Cells(1, 1).Row
 Fil_F = Selection.Cells(Selection.Cells.Rows.Count, 1).Row 
If Fil_I < 43 Then
         MsgBox ("Esta fila no se puede eliminar.")
        Sheets("Planilla de Costos").Protect "PWD12345", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
        Exit Sub
    End If
    If Fil_F >= UltimaFila Then
    MsgBox ("Esta fila no se puede eliminar.")
        Sheets("Planilla de Costos").Protect "PWD12345", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
        Exit Sub
        End If

ahora lo ajusto con los Or

Gracias!

Si, puedes usar los que quieras, incluso puedes combinar los dos (And & Or) en la misma validación.

A ver si se me ocurre un ejemplo. Digamos:

Dim number As Integer
number = 35
If number > 10 And number < 20 Or number > 40 And number < 50 Or number = 80 Then
    MsgBox "Valido"
Else
    MsgBox "No valido"
End If

Ese código busca un numero entre 10 y 20 o entre 40 y 50 o igual a 80. Cualquier numero que sea diferente a 80 o no este entre 10 y 20 o entre 40 y 50 no seria valido. En ese ejemplo seria 35 (no valido)

¡Gracias! 

en realidad no tiene que ver con la información de las celdas si no que busca poder eliminar filas entre un rango de filas, pero ese rango puede crecer si vas insertando más filas, por eso es que se definió la última fila como la última que tiene datos en la columna "A". y la columna 43 como límite inferior

muchas gracais por tu ayuda y pronta respuesta.

Saludos!

Un placer, podrías valorar la respuesta al menos como Útil o Buena, la respuesta a tu pregunta la encontraste tu mismo, pero te aporte algo nuevo que no sabias ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas