Bild aus Excel per VBA in Outlook Mail?
Hi Leute,
ich stehe gerade etwas auf dem Schlauch.
Ich habe einen Bereich aus Excel als Bild in der Zwischenablage:
Range("D100:Z04").CopyPicture xlScreen, xlBitmap
Wie bekomme ich den jetzt in eine Email rein?
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.To = "test@test.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.HTMLBody = RangetoHTML(rng)
.Display
End With
On Error GoTo 0
Hab es schon mit
-Body = SendKeys "^V" probiert aber das scheint nicht zu funktionieren.
In der Zwischenablage ist es. Wenn ich eine neue Mail öffne und Strg+V drücke wird es mir wie gewünscht eingefügt. Nur über VBA kriege ich das nicht hin.
Sorry fürs blöd anstellen und danke schon mal für eure Hilfe.
Chris
2 Antworten
Hallo augsburgchris,
um ein Bild aus Excel in eine E-Mail einzufügen, könntest du das folgende VBA-Skript verwenden:
Sub EmailBild()
Dim OutApp As Object
Dim OutMail As Object
Dim rng As Range
Dim Chart As ChartObject
mathematica
Copy code
Set rng = Range("D100:Z104") 'Bild aus Excel erstellen Set Chart = ActiveSheet.ChartObjects.Add( _ Left:=rng.Left, _ Top:=rng.Top, _ Width:=rng.Width, _ Height:=rng.Height) Chart.Activate ActiveChart.ChartArea.Copy 'E-Mail erstellen und Bild einfügen Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .To = "Empfänger@beispiel.com" .Subject = "Bild aus Excel" .Attachments.Add Chart.Chart.Export("C:\Bild.png") .Display End With 'Bild aus Excel entfernen Chart.Delete
End Sub
Dieses Skript erstellt ein Chart-Objekt aus dem angegebenen Zellbereich, kopiert es in die Zwischenablage und fügt es als Anhang in die E-Mail ein.
Ich hoffe, dass dir das weiterhilft. Wenn du weitere Fragen hast, stehe ich gerne zur Verfügung.
Das ist die finale Lösung:
Sub Versenden()
Application.ScreenUpdating = False
ActiveSheet.Range("D140:CP145").CopyPicture Appearance:=xlScreen, Format:=xlPicture
With ActiveSheet.ChartObjects.Add(0, 0, Range("D140:CP145").Width, Range("D140:CP145").Height).Chart
.Parent.Activate
.Paste
.Export "F:\Privat\test.JPG"
.Parent.Delete
End With
Application.ScreenUpdating = True
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "Empfänger@beispiel.com"
.Subject = "Betreff"
.htmlbody = "Hallo zusammen, <br><br> Text <br><br><img src='F:\Privat\test.JPG'><br><br> Viele Grüße <br> Chris"
.Display
End With
End Sub
Das geht bei mir:
OutMail.GetInspector.WordEditor.Range.Paste
Hab es jetzt so gelöst.
Sub Versenden()
Application.ScreenUpdating = False
ActiveSheet.Range("D140:CP145").CopyPicture Appearance:=xlScreen, Format:=xlPicture
With ActiveSheet.ChartObjects.Add(0, 0, Range("D140:CP145").Width, Range("D140:CP145").Height).Chart
.Parent.Activate
.Paste
.Export "F:\Privat\test.JPG"
.Parent.Delete
End With
Application.ScreenUpdating = True
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "Empfänger@beispiel.com"
.Subject = "Betreff"
.htmlbody = "Hallo zusammen, <br><br> Text <br><br><img src='F:\Privat\test.JPG'><br><br> Viele Grüße <br> Chris"
.Display
End With
End Sub
Das funktioniert aber nur, wenn das Bild beim Empfänger unter dem angegebenen Pfad zu finden ist. Es wird nicht der Mail angefügt (würde mich jedenfalls wundern).
Es kann so sein, dass das dir bewusst ist und es so gewollt ist. Ich wollte es nur erwähnt haben. So kann es sein, dass in deinen Tests alles passt, aber bei einem externen Empfänger es mau aussieht.
Auf dem Handy wird das Bild angezeigt. Und das hat keine Konnektivität zum Firmenrechner.
In HTML gibt es nur Links zu Bildern.
Sie werden eingebettet. Die HTML-Seite kann ohne Interpreter keine bitweise gespeicherten Bilddaten halten und als Bild darstellen. Selbst wenn es inzwischen gehen sollte, so hast du nicht die Bilddaten im htmlbody stehen, sondern nur den Link.
Aber wieso kann ich die Email dann auf mein Handy schicken und das Bild wird dort angezeigt?
Das weiß ich um ehrlich zu sein nicht. Ich kann es mir nur so erklären, dass Outlook sich automatisch einklinkt, das Bild liest und die Bitdaten des Bildes in der Mail versteckt.
Hast du auch auf dem Handy Outlook? Würde mich mal interessieren, ob andere Clients die Bildinformationen auch rücktransformieren können, also ob das ein etablierter Standard ist. Microsoft definiert ja gerne Standards.
Teste es auf jeden Fall noch einmal mit einem anderen Client (gmx, webmail, yahoo, gmail, ...)
Nein verwende auf dem privaten Handy das Mailprogramm von t-online.de.
An die Hotmail-Adresse die ich über Samsung Mail abrufe geht es auch wenn ich auf "Bilder laden" drücke.
Im Zweifelsfall hättest du es noch als Attachment beifügen können. https://learn.microsoft.com/de-de/office/vba/api/outlook.attachments
Hi danke schon mal aber es soll ja kein Chart aus dem Bereich werden (Dieses ist ja dann Leer. Ich möchte ja dem Bereich als Bild rauskopieren.
Bei .Attachments.Add Chart.Chart.Export ("C:\Bild.png") Hängt er sich aber ohnehin auf.