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.
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