Macro eliminar imágenes

He hecho una macro que coge de una carpeta las imágenes, según ciertos paramtros puestos en celdad de mi hoja, e inserta las imágenes. Ahora quería hacer una que me eliminara dichas imágenes( una función limpia). Lo he intentado con la grabadora de macros, (selecciono las imágenes y suprimo). Pero cuando vuelvo a insertar otras imágenes y luego le doy a limpiar me da error. Yo pienso que es porque cuando lo hago con la grabadora se hace para esas imágenes, que tienen asociadas un numero concreto.
Como lo podría arreglar para que de forma genérica me coja las imágenes insertadas.
La forma de insertar imágenes lo hice con Shapes. AddPicture.

1 Respuesta

Respuesta
1
Te dejo una rutina para eliminar los Picture:
Sub EliminaImagenes()
'macro desarrollada por Elsamatilde 26/05/08
'http://galeon.com/aplicaexcel
N = ActiveSheet.Shapes.Count
For i = N To 1 Step -1
'controla el tipo de objeto y elimina si se trata de Picture
On Error Resume Next
ActiveSheet.Shapes(i).Select
If Left(ActiveSheet.Shapes(i).Name, 7) = "Picture" Or Left(ActiveSheet.Shapes(i).Name, 5) = "Image" Then
ActiveSheet.Shapes(i).Delete
End If
Next
End Sub
Hola, muchas gracias primero que todo:
Me surgen dos dudas asociadas:
1- No entiendo que hace la sentencia : If Left(ActiveSheet.Shapes(i).Name, 7) = "Picture" Or Left(ActiveSheet.Shapes(i).Name, 5) = "Image" Then ......   ??? los numero a que hace referencia????
2- ¿Si en la hoja existen imágenes que no quiero eliminar (por ejemplo unas imágenes que siempre repito) como lo hago? Porque la función elimina todas
No quedó claro eso en tu consulta... Paso a responder los puntos:
1- If Left(..., 7) consulta si los 7 primeros caracteres del nombre (name) del objeto o Shape seleccionado devuelve 'Picture' o los 5 primeros devuelve 'Image'.
Esto se hace para separar los otros objetos, como pueden ser botones, textbox, comentarios, etc.
2 - Si quieres excluir algunos objetos hay varias alternativas dependiendo de la cantidad y tipo de controles que haya en la hoja. Algunos ejemplos:
a- Si solo algunos, cuyos nombres se pueden individualizar, agregá a continuación una línea como esta:
If activesheet.shapes(i).name = "Picture 1" or activesheet.shapes(i).name = "Picture 2" then
exit sub
end if
b- Si siempre los fijos serán a partir del nro 3 por ej, adaptar lo del pto anterior para evaluar si el nombre es´ta por debajo:
if mid(activesheet.shapes(i).name,9,2) < 3 then
Esto controla si lo que está a partir de la posición 9 del nombre del objeto es menor a 3. El nro 2 indica el largo es decir hasta 99
c- Aregar un mensaje de consulta antes del delete, algo así:
sino = Msgbox(activesheet.shapes(i).name & "Desea eliminarlo?", vbyesno)
d- Un poco más completo: Luego de cada Shapes. Add guardar en alguna celda su nombre. Y en esta rutina antes de eliminarlo buscarlo en la lista, si está eliminarlo.
Como verás este tema no es tan simple, depende de muchos factores. Espero que con estos ejemplos encuentres tu solución.
Gracias otra vez, pero no lo consigo :(.
He hecho lo siguiente:
En la hoja sin ninguna imagen inserto las imágenes que quiero mantener. Luego consulto sun nombre con esta función:
Sub CONSULTA_NOMBRE_IMAGEN()
Dim NOM As String
Dim N As Integer
Dim i As Integer
N = Worksheets("salidas").Shapes.Count
For i = N To 1 Step -1
On Error Resume Next
Worksheets("salidas").Shapes(i).Select
If Left(ActiveSheet.Shapes(i).Name, 7) = "Picture" Or Left(ActiveSheet.Shapes(i).Name, 5) = "Image" Then
NOM = Worksheets("salidas").Shapes(i).Name
Worksheets("salidas").Range("v" & i).Value = NOM ' con esto sé el nombre de las imagenes a mantener'
End If
Next
Luego ya puedo aplicar mi macro de insertar imagenes.
Cuando quiero borrar las imágenes insertadas con la macro, pero mantener las que no quiero borrar aplico esta función:
Sub EliminaImagenes()
Dim N As Integer
Dim i As Integer
N = Worksheets("salidas").Shapes.Count
For i = N To 1 Step -1
'controla el tipo de objeto y elimina si se trata de Picture
On Error Resume Next
Worksheets("salidas").Shapes(i).Select
If Worksheets("salidas").Shapes(i).Name = "picture 359" Or Worksheets("salidas").Shapes(i).Name = "picture 360" Then
Exit Sub
End If
If Left(Worksheets("salidas").Shapes(i).Name, 7) = "Picture" Or Left(Worksheets("salidas").Shapes(i).Name, 5) = "Image" Then
ActiveSheet.Shapes(i).Delete
End If
Next
End Sub
Las pictures 359 y 360 son las que consulte con la anterior función.
Pues me borra todas y no sé por que.
Muchas gracias y siento el tocho
Seguramente no te reconoce la expresión "picture 359" porque debe comenzar con mayúsculas.
Además te cambié el orden de tus instrucciones, así no corres el riesgo de que finalice el proceso (x encontrar algunas de esas 2) faltándole aún otras x borrar.
Sub EliminaImagenes()
Dim N As Integer
Dim i As Integer
N = Worksheets("Hoja2").Shapes.Count
For i = N To 1 Step -1
'controla el tipo de objeto y elimina si se trata de Picture
On Error Resume Next
Worksheets("Hoja2").Shapes(i).Select
If Left(Worksheets("Hoja2").Shapes(i).Name, 7) = "Picture" Then
If Worksheets("Hoja2").Shapes(i).Name <> "Picture 1" And Worksheets("Hoja2").Shapes(i).Name <> "Picture 5" Then
ActiveSheet.Shapes(i).Delete
End If
End If
Next
End Sub
(Reemplazá la Hoja2 x la tuya, salidas).
Saludos
Elsa
Tus mejores opciones en manuales Excel desde:
http://galeon.com/aplicaexcel/manuales.htm
Muchas gracias Elsa. Lo probaré así. Pero también me he dado cuenta que si no quieres eliminar 2 imágenes, solo tienes que agruparlas y deja de ser una picture
Saludos artista

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas