Macro para eliminar objetos y autoformas de una rango de Excel

En la próxima versión de EXCELeINFO add-in se añadirá una nueva opción en el menú objetos que nos permitirá eliminar las autoformas y objetos que tengamos en determinado rango de una hoja de Excel.

Este menú se añade como hermano del que ya existe llamado Eliminar todos los objetos y formas de la hoja activa, liberada en la versión 2.4.5.

Cómo funciona

El primer paso será elegir el rango del cual queremos eliminar las formas. Con un contador For Next tomaremos el número de la primera fila y columna, así como de la última fila y columna del rango seleccionado.

En base a los valores de filas y columnas tomados, mediante un For each recorremos las formas y con mediante la propiedad BottomRightCell obtendremos la ubicación (fila-columna) donde cada forma está situada. Con un If else se hará la validación de si la fila y columna cada objeto se encuentra dentro del rango elegido, éstos se eliminarán.

Eliminar autoformas de un rango en Excel

Figura 1. La dirección de cada objeto se toma con la celda de la parte inferior derecha.

Código

Option Explicit
Public Const Titulo = "EXCELeINFO"
Sub EliminarObjetosRango()
'
'Declaramos variables.
Dim Celda As Range
Dim PrimeraFila As Integer
Dim PrimeraColumna As Integer
Dim UltimaFila As Integer
Dim UltimaColumna As Integer
Dim shp As Object
Dim tc As Integer
Dim tr As Integer
Dim Cuenta As Integer
Dim ErrorHandler As String
'
'En caso de error...
On Error GoTo ErrorHandler
'
'Recorre cada celda de la selección.
For Each Celda In Selection
    PrimeraFila = Celda.Row
    PrimeraColumna = Celda.Column
    GoTo Jump
Next Celda
'
Jump:
'
For Each Celda In Selection
    UltimaFila = Celda.Row
    UltimaColumna = Celda.Column
Next Celda
'
Cuenta = 0
'
'Recorre cada objeto de la hoja y valida su posición.
For Each shp In ActiveSheet.Shapes
    tc = shp.BottomRightCell.Column
    tr = shp.BottomRightCell.Row
    If (tc >= PrimeraColumna And tc <= UltimaColumna) And _
       (tr >= PrimeraFila And tr <= UltimaFila) Then
        shp.Delete
        Cuenta = Cuenta + 1
    Else
    End If
Next
MsgBox Cuenta & " objetos eliminados.", vbInformation, Titulo
'
Exit Sub
'
'En caso de detectar un error...
ErrorHandler:
MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, Titulo
'
End Sub

Anexos

:: Descargar el ejemplo Eliminar objetos de una rango -EXCELeINFO.rar

You may also like...