Una entrada "corta", para así cumplir con distintas consultas recibidas al respecto. ¿Puedo seleccionar un rango de celdas y guardarlo como una imagen JPG? Obviamente, si.
Podríamos recurrir a la utilización de las API de Windows, pero me gusta hacer las cosas de la forma mas sencilla posible y, por el momento, las dejaré de lado; echaré mano al objeto Chat (gráfico) y solucionaremos lo planteado por mis lectores.
¿Chart? Si, Chart. Una de las propiedades muy poco conocida de este objeto es que nos permite "guardar" una imagen dentro de el, para luego exportarla a nuestro disco rígido en alguno de los formatos mas utilizados (GIF, JPG).
[+/-] Ver el resto / Ocultar
La cuestión es sencilla, pero veamos los "pasos lógicos" necesarios para cumplir con nuestro cometido:
1) Definir el rango que quiero exportar a JPG
2) Copiar la imagen de dicho rango
3) Pegar esa imagen dentro del gráfico (objeto Chart)
4) Exportar el gráfico a JPG
Antes de dar curso al punto 4 hay que tener en cuenta una cuestión: voy a generar un archivo JPG, al cual tendré que guardarlo en alguna unidad de almacenamiento (vb: disco rígido, pendrive, etc, etc, etc). Si bien parece una redundancia, no lo es: antes de guardarlo debo verificar si existe o no el tan mentado archivo. De omitir este ítem tendría un problema, dado que no se puede guardar un archivo de igual nombre dentro de un mismo directorio. Aunque esto está salvado en mi código, lo aclaro para que se tomen la costumbre de siempre analizar muy bien todo el panorama antes de escribir la macro.
Bueno, no queda mucho mas por decir, así que veamos:
Sub Range2Jpg()
Dim MyChart As Chart
'aqui defino el rango:
With Range("A1:G30")
'copio la imagen, pasando dos argumentos requeridos:
.CopyPicture Appearance:=xlScreen, Format:=xlPicture
'creo el objeto gráfico: noten que como ancho y alto paso los valores
'que tiene el rango, así la imagen es del mismo tamaño
Set MyChart = ActiveSheet.ChartObjects.Add(10, 10, .Width, .Height).Chart
End With
'pego dentro del gráfico el rango copiado previamente
MyChart.Paste
'y le quito los bordes:
MyChart.ChartArea.Border.LineStyle = 0
'controlador de errores:
On Error Resume Next
'borro la imagen, si es que esta existe:
Kill "D:\Range2Jpg.jpg"
'y exporto el gráfico como JPG
MyChart.Export "D:\Range2Jpg.jpg"
'lo borro y elimino de la memoria, para liberar recursos:
MyChart.Parent.Delete
Set MyChart = Nothing
End Sub
Y desde ya que todo lo que existía dentro del rango A1:G30 se "metió" dentro del gráfico y lo exporté a un archivo JPG:
Ni hablar, soy demasiado vago y malo como para ponerme a diseñar. Pero conste que a la imagen la estoy mostrando desde el Visualizador de fotos de Windows... para que vean que no miento. Ese icono en el centro es un archivo PNG que importé a Excel y, como verán, también fue incluido en la imagen que generé a partir del rango.
Entonces: tomo un rango, lo copio, lo pego dentro de un gráfico (chart) y a ese gráfico lo exporto como JPG. Sencillo, rápido y funciona.
Y ahora la pregunta del millón: ¿para qué quiere exportar un rango como jpg? Existen tantas respuestas como usuarios de Excel hay en el mundo. En algunos caso desearemos mostrar un informe, pero que no accedan a sus datos, entonces ¿que mejor que presentar una "foto" en vez de la planilla de cálculos?
Otro aspecto muy muy consultado: envío un mail desde Excel (cosa que vimos como hacer) y de esta forma me es posible adjuntar una imagen con datos/informes que debo hacer llegar a otras personas, vía correo electrónico. Esa pobre y desabrida foto que subí como ejemplo bien podría ser la imagen de un formulario, en donde le indicamos a nuestros clientes un detalle de su deuda, extraída directamente de nuestra tabla de datos.
Suerte y nos vemos pronto.
Gracias Totales..
ResponderEliminarDisculpa si duplico el comentario, he intentado ponerlo con otro navegador y creo que no me lo ha permitido.
ResponderEliminarEstoy intentando modificar esta macro para que me deje introducir nombre de archivo y ruta de guardado... ¡no lo consigo! ¿puedes ayudarme?
Gracias de antemano.
Primero cambias esta línea:
ResponderEliminarKill "D:\Range2Jpg.jpg"
y luego esta:
MyChart.Export "D:\Range2Jpg.jpg"
En ambos casos el ejemplo los guarda en el disco D:\, pero vos podrías, por citar algo, cambiar esa ruta por: "C:\Mis Documentos\Graficos\Grafico1.jpg"
Espero te haya servido; gracias por tu visita al blog