Macros para enviar tablas de Excel como imágenes al cuerpo de un correo

Comunicarse a distancia, y en especial en estos tiempos, suele tener sus desventajas por cada cosa buena que presenta. Por ejemplo, tener que enviar un correo electrónico a muchas personas y tener que agregar tablas para presentar cierta información. Ahí la cosa se complica un poco, pero para estos casos podemos hacer uso de macros para poder hacer los correos bastante más presentables y cómodos de leer.

Aquí abajo te muestro el código de cómo puedes conseguir este efecto, pero primero recuerda que antes de correr un macro que hace uso de Outlook debes activar la librería en VBA.

El código

Para que esto funcione, introduce este código en un nuevo módulo:

Sub Mail_small_Text_And_JPG_Range_Outlook()
Dim OutApp As Object 
Dim outMail As Object 
Dim strbody As String 
Dim MakeJPG As String 
Dim PictureRange As Range 
Dim outPA As Outlook.PropertyAccessor 
Dim colAttach As Outlook.Attachments 
Dim outAttach As Outlook.Attachment

 With Application 
    .EnableEvents = False 
    .ScreenUpdating = False 
End With 

'Para evitar temas de seguridad, activamos el tag de propagacion de microsoft
Const PR_ATTACH_CONTENT_ID = "http://schemas.microsoft.com/mapi/proptag/0x3712001F"

Set OutApp = CreateObject("Outlook.Application") 
Set OutMail = OutApp.CreateItem(0) 
strbody = "Hola a todos" & "<br><br>" & _ 
    "Adjunto pueden encontrar la informacion de las tablas" & "<br>" & _ 
    "Quedo al pendiente para cualquier aclaracion." & "<br><br>" & _ 
    "Saludos! S<br>"

'Aqui creas una imagen JPG desde un rango de Excel 
    With ActiveWorkbook 
    On Error Resume Next 
    .Worksheets(1).Activate 
    Set PictureRange = .Worksheets(1).Range("A1:H20") 
    PictureRange.CopyPicture 
    With .Worksheets(1).ChartObjects.Add(PictureRange.Left, PictureRange.Top, PictureRange.Width, PictureRange.Height) 
        .Activate 
        .Chart.Paste 
        .Chart.Export Environ$("temp") & Application.PathSeparator & "NamePicture.jpg", "JPG" 
    End With     
.Worksheets(1).ChartObjects(.Worksheets(1).ChartObjects.Count).Delete 
End With 
MakeJPG = Environ$("temp") & Application.PathSeparator & "NamePicture.jpg" 
Set PictureRange = Nothing

'Paso para crear la imagen sin adjuntar el archivo, manipulamos las propiedades del correo
Set colAttach = outMail.Attachments
Set outAttach = colAttach.Add(MakeJPG)
Set outPA = outAttach.PropertyAccessor
outPA.SetProperty PR_ATTACH_CONTENT_ID, "NamePicture.jpg" '<------- aqui va el nombre de tu imagen

On Error Resume Next 
With OutMail 
    .To = "something@somewhere.mx" 
    .CC = "" 
    .BCC = "" 
    .Subject = "Faltas por empleado" 
    .HTMLBody = "<Body>" & strbody & "<img src=""cid:NamePicture.jpg"" width=750 height=700></Body>" 
    .Display 
End With 
On Error GoTo 0 
With Application 
    .EnableEvents = True 
    .ScreenUpdating = True 
End With 
Set OutMail = Nothing 
Set OutApp = Nothing
 End Sub

Ahora bien, estas son las cosas que tendrás que necesitas saber para poder ajustar este macro a tus preferencias:

Crear la imágen por medio de un rango, el cual se consigue con estas líneas:

Set PictureRange = .Worksheets(1).Range("A1:H50")     PictureRange.CopyPicture 
        With .Worksheets(1).ChartObjects.Add(PictureRange.Left, PictureRange.Top, PictureRange.Width, PictureRange.Height) 
        .Activate 
        .Chart.Paste 
        .Chart.Export Environ$("temp") & Application.PathSeparator & "NamePicture.jpg", "JPG"

Cambiando los valores que están en el rango y la hoja para que se ajusten a lo que deseas enviar, puedes tomar cualquier tabla en tu libro de trabajo y convertirtla en una imágen temporal que será borrada en cuanto apagues la computadora.

El cuerpo HTML

.HTMLBody = "<Body>" & strbody & "<img src=""cid:NamePicture.jpg"" width=750 height=700></Body>"

Es importante usar siempre el cuerpo HTML en este macro, de otro modo no podremos insertar imágenes. Si te interesa saber cómo se puede modificar y qué parámetros se pueden usar, en este link encontrarás información.

El código para tomar la imagen

<img src=""cid:NamePicture.jpg"" width=750 height=700></html>"

Esta es la línea que se encarga de insertar la imagen en el correo, por lo cual puedes ponerla en cualquier parte del Body para que salga al inicio, al final o en medio dependiendo de dónde la prefieras. Por ejemplo, si quisiera que la imagen estuviera al final, quedaría así:

"<html><p>" & "Hola a todos" & "<br><br>" & _ 
      "Adjunto puedes encontrar una table con los datos presentados." & "<br>" & _ 
      "Cualquier duda quedo a la orden." & "<br><br>" & _ 
      "S.<br>"    "</p><img src=""cid:NamePicture.jpg"" width=750 height=700></html>"

Y si quisiera que quedara en medio, tendría que quedar así:

"<Body>" & "Hola a todos" & "<br><br>" & _ 
      "Adjunto puedes encontrar una table con los datos presentados." & "<br>" & _ 
      <img src=""cid:NamePicture.jpg"" width=750 height=700>" & "<br>" _ 
      & "Cualquier duda quedo a la orden." & "<br><br>" & _ 
      "S.<br><Body>”

Muestra mejor presentación en tus correos electrónicos con tablas de Excel y automatiza tus actividades con macros para simplificar tus tareas.

Cualquier duda nos leemos abajo.

Macros para enviar tablas de Excel como imágenes al cuerpo de un correo
Scroll hacia arriba