2012-04-23 17 views
6

Me gustaría enviar un gráfico de Excel en el cuerpo de un correo electrónico (Outlook) (no como archivo adjunto) de VB, ¿alguien sabe cómo hacer esto?Cómo enviar una imagen incrustada en un correo electrónico desde excel

resuelto:
sólo para añadir un poco más de detalle para responder a continuación que necesita lo siguiente (podría hacer con algunas mejoras).

Sheets(2).ChartObjects(1).Chart.Export "C:\temp\Chart2.png" 

....

.HTMLBody = "<html xmlns:o='urn:schemas-microsoft-com:office:office'" & _ 
      "xmlns: x = 'urn:schemas-microsoft-com:office:excel'" & _ 
      "xmlns='http://www.w3.org/TR/REC-html40'> " & _ 
      "<head></head><body><img src='Chart2.png'></body></html>" 

y

.Attachments.Add ("C:\temp\Chart2.png") 

Respuesta

5

parece la mejor forma de hacerlo es exportar el gráfico:

Sheets(1).ChartObjects("Chart 1").Chart.Export "C:\Chart1.png" 

Y luego añadir la imagen en su correo cuerpo HTML:

.HTMLBody = .HTMLBody & "< img src='c:\folder\filename.png'>" 

confirmada por ambas technet y mrexcel

+0

Gracias pasó alrededor de 2 días en busca de una solución. – aronp

+0

@JMax. Esto funcionó como un encanto cuando intenté enviar la imagen a mi propia dirección de Outlook, pero cuando intenté reenviar el mismo correo con la imagen incrustada a mis colegas, no pudieron ver la imagen. Lo mismo sucedió cuando intenté reenviarlo a mi cuenta de Gmail. ¿Alguna idea de lo que podría causar esto? – vestland

+0

@ 123apd al reenviar un correo electrónico en Outlook, tiene que confirmar manualmente que desea descargar la imagen (intente hacerlo primero con la mano y luego automatizar) – JMax

3

pensé que me gustaría añadir mi solución aquí, además de la anterior, ya que está utilizando tanto un sub y una ruta de archivo temporal, en caso de que esté interesado.

he cambiado el código de here para insertar un gráfico utilizando una ruta temporal (que hacer lo mismo usando un rango de celdas en el libro):

Sub createGraph(nameSheet As String, nameChart As String, nameFile As String) 
    ThisWorkbook.Activate 
    Worksheets(nameSheet).Activate 
    With ThisWorkbook.Worksheets(nameSheet).ChartObjects(nameChart) 
    .Activate 
    .Chart.Export Environ$("temp") & "\" & nameFile & ".jpg", "JPG" 
    End With 
End Sub 

En el cuerpo HTML poner:

Call createGraph("Graphs", "Chart 1", "filename") 
TempFilePath = Environ$("temp") & "\" 
.Attachments.Add TempFilePath & "filename.jpg", olByValue, 0 
.HTMLBody = .HTMLBody & "<img src='cid:filename.jpg'>" 

Al usar "olByValue, 0", el archivo adjunto se agrega en la posición 0 y no se ve en el correo electrónico como un archivo adjunto.

Cuestiones relacionadas