HERBERS Excel-Forum - das Archiv

Thema: Mail aus Excel erstellen, mit Formatierung

Mail aus Excel erstellen, mit Formatierung
daniel
Hallo

mit folgendem einfachen Code erzeuge ich aus Excel heraus eine E-Mail:

Sub test()

With CreateObject("Outlook.Application").createitem(0)
.to = "alle@hotmail.com"
.Subject = "Hallo Welt"
.Body = "Mail Inhalt"
.display
End With
End Sub


Problem an der Sache, so gehts nur mit blankem Text, ohne jede Formatierung.
Gewünscht wäre jedoch, manche Textteile zu formatieren, dh fett, unterstrichen, Schriftfarbe
ein möglicher Weg wäre natürlich: .HtmlBody = "Mail Inhalt", hierbei müssen die Formatierungen mit HTML-Tags eingefügt werden.
.HtmlBody = "<u>Mail Inhalt</u>"

das ist aber aufwendig und "oldschool".
Einfacher wäre, den Text in einem Zellbereich über mehrere Zeilen zu erstellen, zu formatieren und von dort in die Mail zu übernehmen, das geht ja manuell mit Copy-Paste.
Aber wie mit VBA ????
wenn möglich sollten nur die Texte mit ihren Formaten übernommen werden, eine Darstellung in einer Tabelle ist nicht notwendig.

vielen Dank schon mal,
Gruß Daniel
AW: Mail aus Excel erstellen, mit Formatierung
peter
Hallo

Such nach "RangeToHtml" und Du wirst einiges finden (auch hier im Forum)

Peter
AW: Mail aus Excel erstellen, mit Formatierung
volti
Hallo Daniel,

das Thema hatte ich gerade erst hier im Forum behandelt.
https://www.herber.de/forum/archiv/2000to2004/2001821_Umstellung_auf_CDOmessage_HTMLBody_Tabelle_Hilfe_noetig.html#2001831

Neben RangeToHTML oder Range2HTML (meine Version) gibt es noch diverse VBA-Möglichkeiten Bereiche aus Excel als Tabelle oder aber auch als Bild per Paste in Deine Mail einzufügen.

Oder zum Übersetzen von Einzelfeldern gerne die im oben verlinktem Beispiel nutzen.

Falls noch Bedarf besteht, zeige ich gerne weitere von meinen vielen Beispielen in den verschiedenen Foren.

Gruß
Karl-Heinz
AW: Mail aus Excel erstellen, mit Formatierung
daniel
Hi volti

Danke, funktioniert auch.
ich wollte es halt in dem Projekt bei minimalem Code belassen und hoffte auf eine Copy-Paste-Variante.
Bild ist interessant, aber vielleicht will der Empfänger die gesendeten Daten kopieren.

naja, jetzt muss ich erstmal abwarten, was die Kollegen an Formatierung im Text brauchen. Wenns nur ein paar fette Wörter sind, belass ichs beim einfachen HTML-Text.
Gruß Daniel
AW: Mail aus Excel erstellen, mit Formatierung
volti
Hallo,

hier noch ein Beispiel mit Range2HTML. Da kannst Du auch Dein Replace anwenden.

      .GetInspector

.HTMLBody = "Hallo<br>," & Replace( Range2Html(WSh2.Range(sBer)),"###","Anton") & .HTMLBody


Falls es doch Paste sein soll, melde Dich noch mal hier...

Code:


Private Function Range2Html(oBereich As Range) As String ' Gibt den angegebenen Bereich als HTML zurück, incl.Bilder Dim sTmpDatei As String, sTmp As String, sTmpVz As String Dim iff As Integer, P As Long ' Bereich in Datei exportieren With oBereich sTmpVz = Environ$("temp") & "\" sTmpDatei = sTmpVz & Format(Now, "ddmmyy" & Int(Timer) * 10) & ".htm" .Parent.Parent.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=sTmpDatei, Sheet:=.Parent.Name, _ Source:=.Address, _ HtmlType:=xlHtmlStatic).Publish Create:=True iff = FreeFile Open sTmpDatei For Input As iff Range2Html = Replace(Input(LOF(iff), iff), "align=center x:publishsource=", _ "align=left x:publishsource=") Close iff ' Feststellen, ob auch Bilder im Bereich sind P = InStr(1, Range2Html, "<link rel=File-List href=") + 26 If P > 26 Then sTmp = Mid$(Range2Html, P, InStr(P, Range2Html, "/filelist.xml") - P) Range2Html = Replace(Range2Html, sTmp, sTmpVz & sTmp) End If End With On Error Resume Next Kill sTmpDatei Kill sTmpVz & sTmp End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
AW: Mail aus Excel erstellen, mit Formatierung
daniel
Hallo Karl-Heinz

auch dir vielen Dank für deine Lösung.

Gruß Daniel
AW: Mail aus Excel erstellen, mit Formatierung
daniel
Hi
ja ok.
aber gibts nen einfachen Befehl, der das Copy-Paste, so wie ich es von Hand machen kann, nachstellt?
Gruß Daniel
AW: Mail aus Excel erstellen, mit Formatierung
peter
Hallo

Probier mal ob dies Deinen Anforderungen genügt.



Sub send_mail_rich_text()

Dim oOlApp As Object ' Outlook.Application
Dim oOlMItem As Object ' Outlook.MailItem
Dim oWdDoc As Object ' Word.Document


Set oOlApp = CreateObject("Outlook.Application")
Set oOlMItem = oOlApp.CreateItem(olMailItem)

Range("A1:D4").Copy ' anpassen

With oOlMItem
.To = "p@a.c"
.Subject = "test"
.BodyFormat = 3 ' 3=RichTextFormat

Set oWdDoc = .GetInspector.WordEditor
oWdDoc.Range(oWdDoc.Content.Start, oWdDoc.Content.Start).Paste
.Display ' change to .Send after debugging

End With

Application.CutCopyMode = False

End Sub


Peter
AW: Mail aus Excel erstellen, mit Formatierung
daniel
Hi Peter
danke, aber da kommt noch "Variable nicht definiert" in Zeile Set oOlMItem = oOlApp.CreateItem(olMailItem)
createItem müsste ja irgendeinen Text enthalten
hast du das olMailItem als globale Variable woanders mit Inhalte befüllt?
Gruß Daniel
AW: Mail aus Excel erstellen, mit Formatierung
daniel
ok, einfach 0 reinschreiben, dann gehts (ich arbeite mit Option Explicit, du anscheinend nicht)

ja, funktioniert soweit und macht auch die Signatur automatisch nach meinen Einstellungen, Danke.

jetzt käme noch ein Anforderung hinzu:
der Text enthält einen Dummy-Text, der dann durch den den tatächlich benötigten, immer aktuell berechneten Text ausgetauscht wird.
funktioniert das in diesem Szenario auch irgendwie oder muss man den Zellbereich vorher entsprechen erstellen?

Gruß Daniel

AW: Mail aus Excel erstellen, mit Formatierung
peter
Hallo

Ich vestehe Deine Frage nicht. Was meinst Du mit Dummy-Text?. Die Sub kopiert eine Zellenbereich (im Beispiel A1:D4) in die Email. Wenn der Bereich variable ist, muss er entsprechen angepasst werden.

Peter

AW: Mail aus Excel erstellen, mit Formatierung
daniel
Hi
im dem Bereich steht irgendwo der Text "xxx"
für die Mail sollte dieser Text durch einen anderen Text ersetzt werden.
das ist der einzige Teil im Text, der Variabel ist, der Rest bleibt gleich (stell dir eine standardisierte Geburtstagsmail vor, wo immer nur der Name des jeweiligen Geburtagskindes eingesetzt wird)
bisher mache ich das mit einem REPLACE, bevor ich den Textstring an die Mail übergebe.
würde das hier auch funktionieren oder müsste ich jedesmal in diesem Bereich den konkreten Wert eintragen?
Gruß Daniel