En un reciente comentario, un lector preguntaba por la forma de guardar o exportar una imagen insertada previamente en nuestra Hoja de cálculo de Excel hacia un archivo en nuestro equipo.
El asunto no es sencillo de aplicar, ya que no existe una instrucción directa que permita guardar o exportar de alguna manera una imagen a un archivo en nuestro PC; sin embargo, una solución válida consiste en incluir nuestras imágenes a exportar dentro de un objeto Gráfico; puesto que estos objetos si son exportables fácilmente con la instrucción chart.Export.
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Observamos que la macro recorre todas las formas/objetos de la hoja de Excel activa, y para cada imagen creamos un nuevo gráfico que inmediatamente localizamos como objeto (no como Nueva Hoja), para inmediatamente adecuar el tamaño del gráfico al de la imagen; finalmente copiamos la imagen y la pegamos en el gráfico activo recién creado.
Sólo nos queda seleccionar este gráfico y exportarlo con el nombre que tuviera definida la imagen. Para terminar eliminamos el gráfico y no dejar rastro del trabajo que hemos realizado.
El asunto no es sencillo de aplicar, ya que no existe una instrucción directa que permita guardar o exportar de alguna manera una imagen a un archivo en nuestro PC; sin embargo, una solución válida consiste en incluir nuestras imágenes a exportar dentro de un objeto Gráfico; puesto que estos objetos si son exportables fácilmente con la instrucción chart.Export.
Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:
Sub ExportarImagen() Dim img As Shape Application.ScreenUpdating = False For Each img In ActiveSheet.Shapes 'añadimos un gráfico Charts.Add 'lo situamos como objeto en la Hoja 3 ActiveChart.Location Where:=xlLocationAsObject, Name:="Hoja1" Set chrt = ActiveSheet.ChartObjects(1) nombreimg = img.Name 'adaptamos tamaño de imagen y gráfico With img chrt.Width = .Width chrt.Height = .Height 'copiamos la imagen .Copy End With 'pegamos dentro del gráfico la imegen ActiveChart.Paste 'exportamos el gráfico con el nombre del objeto (imagen) chrt.Chart.Export Filename:="C:\" & nombreimg & ".gif" chrt.Delete Next img Application.ScreenUpdating = True End Sub
Observamos que la macro recorre todas las formas/objetos de la hoja de Excel activa, y para cada imagen creamos un nuevo gráfico que inmediatamente localizamos como objeto (no como Nueva Hoja), para inmediatamente adecuar el tamaño del gráfico al de la imagen; finalmente copiamos la imagen y la pegamos en el gráfico activo recién creado.
Sólo nos queda seleccionar este gráfico y exportarlo con el nombre que tuviera definida la imagen. Para terminar eliminamos el gráfico y no dejar rastro del trabajo que hemos realizado.
Muy ingenioso, funciona bien. Gracias por compartirlo!
ResponderEliminarGracias!!
Eliminar;-)
Excelente, funciona perfecto. Gracias
ResponderEliminar;-)
EliminarSlds!!
hola que tal, tengo un problema donde mi aplicación tiene una imagen en la pantalla de inicio donde esta imagen se cambia por un usuario cuando lo desee, esta aplicación la pienso pasar a varias personas el problema es que la imagen la guardo en una hoja de excel como la puedo tomar de ahí para mostrarla en un control image.
ResponderEliminarViendo este blog se me ocurrio este metodo donde se exporta la imagen y la cargo en el image control, pero tengo un proble de como exportar un objeto imagen?
saludos
Hola Daniel,
Eliminarpues sólo conozco esta forma de exportar imágenes desde Excel... hasta donde yo sé, no existe una manera de hacerlo directamente.
Lo siento.
Un cordial saludo y suerte!!
Buen días tengo un problema, al correr la macro me sale error 70 permiso denegado. ¿Que debo hacer? Gracias de antemano =)
ResponderEliminarHola Racudu,
Eliminarasegúrate existe la hoja y un gráfico en ella...
Este es un código muy simple que no necesita nada, excepto insertar el procedimiento en el proyecto de VBA.
Saludos
Hermano... pues felicitaciones, no sabes cuanto tiempo llevaba buscando esto... Es ud un señor ninja. jajjajajaa. Gracias miles
ResponderEliminar;-)
Eliminargracias!
Hola Amigos!!
ResponderEliminarComo puedo hacer para que cada imagen se guarde con la celda adyacente?
Por ejemplo, tengo imágenes desde A2 hacia abajo y necesito guardar cada imagen con el nombre de esa imagen
que se encuentra en B2 respectivamente.
Por favor!!!
Hola,
Eliminarla idea la tienes en este mismo post...
Emplea para cada imagen (usa un loop del tipo FOR...NEXT):
.Export Filename:="C:\" & nombreimg & ".gif"
y por la variable 'nombreimg' toma el nombre del objeto imagen sobre el que estar operando
Espero haberte orientado
Saludos
Creo que es de esta forma:
ResponderEliminarDonde aparece nombreimg = img.Name
Reemplazar por nombreimg = img.TopLeftCell.Offset(, 1)
Saludos!!!
Estimado Ismael, el siguiente codigo me servía a la perfección hasta windows 7, ahora con el windows vista la imagen que se exporta va en blanco
ResponderEliminarde antemano gracias
Sub exportar()
Sheets("tablero").Select
Dim Izq As Single, Arr As Single, Ancho As Single, Alto As Single
Application.DisplayAlerts = False
With Range("a1:y45")
Izq = .Left: Arr = .Top: Ancho = .Width: Alto = .Height: .CopyPicture
End With
With ActiveSheet.ChartObjects.Add(Izq, Arr, Ancho, Alto)
.Chart.Paste
.Chart.Export "\\**ruta**\imagen1.png"
.Delete
End With
Application.DisplayAlerts = True
End Sub
perdon, ahora con el windows 10 es el problema**
ResponderEliminarHola Eduardo,
Eliminarno podría decirte la incompatibilidad con W10...
quizá alguna actualización, alguna librería afectó algo del paquete office (pasa más a menudo de lo que nos gustaría)...
De hecho, yo personalmente sigo empleando W7, después de ver todos los problemas que generaba la última versión de Windows.
A priori no se ve nada raro en el código que adjuntas...
Si acaso revisa la ruta de la exportación
Siento no poder decirte nada más
Un saludo y suerte (comparte si consigues solucionarlo)
gracias Ismael... si logro solucionarlo con gusto lo comparto. Un saludo!
EliminarHola, me funciona perfecto con mi WinXP y Off2007, pero siempre exporta con el (1) y lo he cambiado al nombre de la imagen que SOLO QUIERO exportar (tengo varias imagenes en mi sheet). Hay algun ajuste? (Las imagenes ya tienen nombre....)
ResponderEliminarHola roberto,
Eliminarsi sabes el nombre del gráfico, puedes emplearlo
.ChartObjects("NombreGafico")...
no hace falta emplear el índice de ese gráfico
Saludos