Formatierung E-Mail aus Makro
#1
Hallo zusammen,
ich versuche per Makro im Excel Serien-E-Mails zu erstellen. Dabei stört mich, dass die daraus im Outlook generierte E-Mail 12 Punkt Abstand nach jedem Absatz als setzt und das obwohl die Standardformatierung im Outlook gem. Vorlage "NormalEMail" auf 0 gesetzt ist. Auch wenn ich im Outlook ne neue E-Mail erstelle, kommt die normale Formatierung und nicht die mit 12 Punkte.

Weiß jemand, woran das liegt und ob es einen Befehl im VBA gibt, der die Formatierung für neue E-Mails auf 0 setzt?

Das ist ein Auszug aus meinem Code:

   Sub EmailErstellenVorlAbrechnung()
   Dim objOutlook As Object
   Dim objMail As Object

   Set objOutlook = CreateObject("Outlook.Application")
   Set objMail = objOutlook.CreateItem(0)
   With objMail
    .To = Range("EMailAdresseVorl").Value
    .Subject = Range("BetreffEMailVorl").Value
    .Body = xxxxx _

Ich freue mich über ein paar Tipps. Danke im Voraus hierfür Smile

Viele Grüße, Georg-Ferdinand
Antworten Top
#2
du kannst eine Email aus einer Vorlage erzeugen. Aber in deinem Code sieht es danach nicht aus. 
hier mal ein schnelles Beispiel von der KI aus der Google suche
Code:
Sub CreateEmailFromTemplate()
    Dim olApp As Object
    Dim olMail As Object
    Dim templatePath As String
   
    ' Pfad zur .oft Datei
    templatePath = "C:\Pfad\zu\Ihrer\Vorlage.oft"
   
    ' Outlook Instanz erstellen
    Set olApp = CreateObject("Outlook.Application")
   
    ' E-Mail aus Template erstellen
    Set olMail = olApp.CreateItemFromTemplate(templatePath)
   
    ' Platzhalter im Text ersetzen (z.B. %NAME%)
    With olMail
        .Body = Replace(.Body, "%NAME%", "Max Mustermann")
        .Subject = Replace(.Subject, "%DATUM%", Date)
        .To = "kunde@example.com"
        .Display ' Zeigt die E-Mail an, zum Senden .Send verwenden
    End With
   
    ' Aufräumen
    Set olMail = Nothing
    Set olApp = Nothing
End Sub
Antworten Top
#3
Hier zusätzlich und alternative auch eine einfache Lösung für die lästigen 12-Punkt-Abstände in Ihren Excel-Serien-E-Mails. 

Outlook nutzt für E-Mails standardmäßig HTML-Formatierung (auch bei "Normale EMail"). Dein VBA-Code setzt den .Body-Text, der als reiner Text interpretiert wird. Outlook konvertiert diesen automatisch in HTML und fügt dabei Standard-Absatzabstände (12pt) ein.
Code:
Sub SerienEmails_OhneAbstaende()
    Dim OutlookApp As Object
    Dim Mail As Object
    Dim Empfaenger As String
    Dim Betreff As String
    Dim TextInhalt As String
    Dim i As Long
    Dim letzteZeile As Long

    ' Outlook-Instanz erstellen
    Set OutlookApp = CreateObject("Outlook.Application")
    Set Mail = OutlookApp.CreateItem(0)
   
    ' Daten aus Excel-Tabelle lesen (Anpassen an Ihre Tabellenstruktur)
    letzteZeile = Sheets("Empfänger").Cells(Rows.Count, "A").End(xlUp).Row
   
    For i = 2 To letzteZeile ' Ab Zeile 2 (Überschrift in Zeile 1)
        Empfaenger = Sheets("Empfänger").Cells(i, 1).Value ' Spalte A: E-Mail-Adresse
        Betreff = Sheets("Empfänger").Cells(i, 2).Value    ' Spalte B: Betreff
        TextInhalt = Sheets("Empfänger").Cells(i, 3).Value ' Spalte C: E-Mail-Text
       
        ' E-Mail-Einstellungen
        With Mail
            .Display ' E-Mail zum Prüfen anzeigen (bei Bedarf durch .Send ersetzen)
            .To = Empfaenger
            .Subject = Betreff
           
            ' KERNLÖSUNG: Formatierung auf einfachen Text umstellen & Zeilenumbrüche entfernen
            .BodyFormat = 1  ' 1 = olFormatPlain (einfacher Text)
            .Body = Replace(TextInhalt, vbCrLf, " ") ' Alle Zeilenumbrüche durch Leerzeichen ersetzen
        End With
       
        ' Optional: Wartezeit zwischen E-Mails (verhindert Outlook-Überlastung)
        Application.Wait Now + TimeValue("0:00:02")
    Next i
   
    ' Aufräumen
    Set Mail = Nothing
    Set OutlookApp = Nothing
    MsgBox "Serien-E-Mails erfolgreich erstellt!", vbInformation
End Sub
Testen Sie den Code zuerst mit 2-3 Test-E-Mails, bevor Sie ihn für große Serien einsetzen. So vermeiden Sie unerwartete Formatierungen.
Antworten Top
#4
Hallo,

nur ein paar eher allgemeine Kommentare:

Auch in Word kann eine Serien-Email mit Excel-Daten erstellt werden.

Outlook nutzt Word als Editor, d.h. alle Word-Einstellungen für Formate z.B. für Absatz, können per VBA angewendet werden.

Zum Programmieren ist ein Weg, die VBA-Codes (für das Absatz-Format) in Word zu erstellen und dann nach Outlook kopieren.


mfg
Antworten Top
#5
Hallo,

der Weg um an die relevanten Werte kommen, da es keinen Absatz in dem Sinne gibt, führt über den Inspector.

beispielhaft so:
Code:
Sub test()
    Dim ol As Object, mail As Object, wd As Object, rng As Object
    Set ol = CreateObject("Outlook.Application")
    Set mail = ol.CreateItem(0)
    mail.Display
    Set wd = mail.GetInspector.WordEditor
    Set rng = wd.Range(0, 0)
   
    With rng.ParagraphFormat
        .SpaceAfter = 0 'dieser ist vermutlich bei dir standartmäßig auf 12 gesetzt beim mir aber nicht.
        .SpaceBefore = 0
    End With
End Sub
Bei mir Win11 prof. O2024 LTSC steht dieser Wert auf 0. Da wurde vermutlich in OL entweder durch Eingriff oder durch eine andere Anwendung dies geändert.

Gruß Uwe
Antworten Top
#6
kleine Ergänzung, falls du mit .HtmlBody dies bauen willst. Dann muss du das im HTML zuweisen.

Beispiel mal auf die Schnelle:
Code:
Option Explicit

Sub test()
    Dim ol As Object, mail As Object, wd As Object, rng As Object, Abstand&
    Abstand = 0   ' oder 12, 6, 8 … je nach Bedarf

    Set ol = CreateObject("Outlook.Application")
    Set mail = ol.CreateItem(0)
    mail.Display
    Set wd = mail.GetInspector.WordEditor
    Set rng = wd.Range(0, 0)
   
    With rng.ParagraphFormat
        .SpaceAfter = 0 'dieser ist vermutlich bei dir standartmäßig auf 12 gesetzt beim mir aber nicht.
        .SpaceBefore = 0
       
    End With
    With mail
        mail.HTMLBody = _
        "<html>" & _
        "<head>" & _
        "<style>" & _
        "p.MsoNormal { margin-top:0; margin-bottom:" & Abstand & "pt; }" & _
        "</style>" & _
        "</head>" & _
        "<body lang='DE' style='word-wrap:break-word'>" & _
        "<div class='WordSection1'>" & _
        "<p class='MsoNormal'>Fdsafd</p>" & _
        "<p class='MsoNormal'>Dsaf</p>" & _
        "<p class='MsoNormal'>&nbsp;</p>" & _
        "<p class='MsoNormal'>Gfsdg gfsdg gfdsa gfsda gfsdg fsd gagg</p>" & _
        "<p class='MsoNormal'>Gfdgfdgsfdsgf</p>" & _
        "<p class='MsoNormal'>&nbsp;</p>" & _
        "<p class='MsoNormal'>&nbsp;</p>" & _
        "<p class='MsoNormal'>HGFDHg</p>" & _
        "<p class='MsoNormal'>hgf</p>" & _
        "</div>" & _
        "</body>" & _
        "</html>"
    End With
End Sub

Gruß Uwe
Antworten Top
#7
Wink 
Vielen Dank Euch allen für die wertvollen Tipps! Nur leider merke ich, dass mir für manche Lösungen etwas das Grundlagenwissen fehlt. Ich bin noch recht am Anfang, was VBA betrifft. Am einfachsten war es daher für mich, weiter mit "With Mail" zu arbeiten und dort dann  ".BodyFormat = 1" einzufügen. 

Ich merke aber, dass gar kein Abstand bei den Absätzen auch nicht gut aussieht. Ideal wären wohl 6 Punkte Abstand. Gibt es hierfür auch irgendeinen Befehl, den man zwischen "With Mail" und "End Witz" einfügen kann oder ist das nur mit htmlbody möglich?
Antworten Top
#8
Hallo,

mit .BodyFormat = 1 stellst du nur das Standartformat auf Text.

Entweder du versendest Serienmails via Word. Da gibt es auch verschiedene Wege oder du bereitest das Serienmail mit HTML/CSS entsprechend auf.

Man kann ein Gerüst in Variablen oder Zellen dazu nutzen. 1x Kopf 1x Anrede 1x Text 1x Abgesang. Und dies danach jeweils entsprechend im HTML aufbereitet weiterverarbeiten.

Wobei der simpelste Weg, wenn es schick aussehen soll natürlich via Word ist.

Falls es mit Excel auf jeden Fall sein soll und dir die Erfahrungen mit HTML/CSS fehlen installiere einen simplen HTML/CSS WYSIWYG-Editor und bereite da den Body vor. Kopiere den Quelltext aus dem Editor packe dies in eine Zelle oder direkt .HTMLBody ="Hier dein Quelltext"  Das sollte dann auch passen.

Gruß Uwe
Antworten Top
#9
Hallo Georg,

warum willst du dich mit Excel & Co herum quälen, um Serienmails zu verschicken. Ich arbeite schon ewig mit diesem Programm: https://www.supermailer.de/. Kostet für Privatanwender einmalig 25 Euro. Ein ganz geniales Programm, mit dem man sogar personalisierte Mails verschicken kann, ähnlich der Serienbrieffunktion von Word.
Viele Grüße
Klaus-Dieter
Der Erfolg hat viele Väter, 
der Misserfolg ist ein Waisenkind
Richard Cobden
Antworten Top
#10
Hallo zusammen,

ich arbeite seit Jahren mit Excel und Serienbriefen im HTML-Format. Dazu lese ich unterschiedliche Textbausteine aus externen HTML-Dateien im .HTMLBody-Bereich ein und versende das Ganze über Excel mit Outlook.

Die Probleme dabei sind Folgende:
  • Die HTML-Syntax ist standardisiert und wird regelmäßig weiterentwickelt (WHATWG/W3C). Um auf dem Laufenden zu bleiben, muss man sich damit regelmäßig auseinandersetzen.
  • Microsoft verwendet innerhalb von Outlook ein eigene Syntax und hält sich nicht genau an den veröffentlichten Standards. Somit gibt es bestimmte Syntaxen (lt. Duden der Plural von Syntax), die MS Outlook ignoriert, andere, die anders "übersetzt" werden. Soweit ich bisher weiß, gibt es seitens MS keine Offenlegung der intern verwendeten Syntaxen.
  • MS Outlook wandelt in der Regel die eingelesene HTML-Formatierung in sein eigenes Format um. Man kann das sehr schön überprüfen, wenn man sich den Quelltext einer HTML-Mail innerhalb von Outlook anschaut.
  • Mit Versionsänderungen von Outlook verändern sich auch die intern verwendeten HTML-Syntaxen. So kann die gleiche Mail bei Outlook 2003 anders aussehen als bei 365 und umgekehrt.
  • Letztendlich kommt es dann auch auf das Empfängersystem an, bei dem die Mail gelesen wird. Hier hat jedes System wieder andere "Interpretationen" der gleichen HTML-Datei: auf welchem Endgerät mit welchem E-Mailprogramm wird das ganze gelesen? Die Darstellungen auf PC/Mac/Tablet/Smartphone usw. sind jeweils (völlig) anders.

Am Ende bleibt übrig: Mit HTML kann man seine Mailtexte formatieren - ja, aber ...

Viel Erfolg trotzdem!
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste