A través de un comentario, días atrás, un lector planteaba la cuestión de cómo eliminar unas imágenes con una posición concreta dentro de una hoja de cálculo, manteniendo el resto de las imágenes existentes en la hoja.
Supongamos la situación de la imagen siguiente:
El objetivo es claro, eliminar únicamente las imágenes situadas en el rango A3:D25.
Insertamos y ejecutamos el siguiente procedimiento 'BorrarImgRango':
Sub BorrarImgRango()
'Añadimos líneas para eliminar imágenes en el rango A3:D25
'Declaramos variables.
Dim PrimeraFila As Integer, PrimeraColumna As Integer
Dim UltimaFila As Integer, UltimaColumna As Integer
Dim img As Object
Dim tc As Long, tr As Long
PrimeraFila = Range("A3").Row
PrimeraColumna = Range("A3").Column
UltimaFila = Range("D25").Row
UltimaColumna = Range("D25").Column
'Recorre cada objeto de la hoja y valida su posición.
For Each img In ActiveSheet.Shapes
On Error Resume Next 'controlamos fallo al NO encontrar imágenes
tc = img.BottomRightCell.Column
tr = img.BottomRightCell.Row
If (tc >= PrimeraColumna And tc <= UltimaColumna) And _
(tr >= PrimeraFila And tr <= UltimaFila) Then
If img.Type = 13 Then
'mensaje que muestra la posición de inicio de la imagen
MsgBox img.Name & "-" & img.Type & "-" & img.TopLeftCell.Address
img.Delete
End If
End If
On Error GoTo 0
Next
End Sub
El resultado es:
Notemos que la imagen debe estar en el interior del rango, al menos su punto inferior-derecha, y es que en este ejemplo estamos empleando la propiedad .BottomRightCell que representa la celda que se encuentra debajo de la esquina inferior derecha del objeto.
Podríamos combinar el código con otra propiedad empleada en la línea:
MsgBox img.Name & "-" & img.Type & "-" & img.TopLeftCell.Address
donde la propiedad .TopLeftCell nos retorna la celda superior-izquierda; por tanto, sería posible con una simple modificación del código, eliminar exclusivamente aquellas imágenes que estuvieran completamente en el interior del rango...