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 imagenOn 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.