Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wie Zeilenumbruch bei Email-Erstellung

Forumthread: Wie Zeilenumbruch bei Email-Erstellung

Wie Zeilenumbruch bei Email-Erstellung
14.05.2009 10:56:34
Lang
Hallo VBA-Spezialisten,
meinen Wunsch einen Text aus Excel via Email zu versenden ist eigentlich mit der im hiesigen Archiv gefundenen Prozedur (s. u.) erfüllt. Doch habe ich zwei Fragen:
1. Wie kann ich dabei einen Zeilenumbruch erzielen? Mit anhängen von '& VbCrLf' hatte ich keinen Erfolg.
2. Sucht sich die Prozedur das Email-Programm auf dem Rechner selbst oder gilt sie automatisch nur für Outlook?
Herzlichen Dank für Eure Bemühungen!
Liebe Grüße Klaus
------------------------------------------------------
Im Archiv gefunden:
StandardModule: basMain
Private Declare Function ShellExecute Lib "Shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Private Sub Mail( _
eMail As String, _
Optional Subject As String, _
Optional Body As String)
Call ShellExecute(0&, "Open", "mailto:" + eMail + _
"?Subject=" + Subject + "&Body=" + Body, "", "", 1)
End Sub


Sub MailVersenden()
Dim rng As Range
Dim sMail As String, sSubject As String
Dim sBody As String
Dim iRow As Integer, iCol As Integer
sMail = "hans@herber.de"
sSubject = "Excel-Daten"
Set rng = Range("A1").CurrentRegion
For iCol = 1 To rng.Columns.Count
For iRow = 1 To rng.Rows.Count
sBody = sBody & rng.Cells(iRow, iCol) & " "
Next iRow
Next iCol
Call Mail(sMail, sSubject, sBody)
End Sub


Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
14.05.2009 11:44:54
Roland
Hallo Klaus,
1. du musst den Zeilenumbruch in den String nehmen, dann klappt es:
sBody = sBody & VbCrLf & rng.Cells(iRow, iCol)
2. Es wird das auf dem Rechner eingerichtete Standard-Emailprogramm ausgeführt.
Gruß
Roland Hochhäuser
AW: Wie Zeilenumbruch bei Email-Erstellung
15.05.2009 12:44:18
Lang
Hallo Roland,
danke für Deine schnelle Antwort. Einmal hat es geklappt.
"sBody" wird mit der Testabfrage: "MsgBox "sbody = " & sBody" vor "Call Mail(sMail, sSubject, sBody)" auch richtig dargestellt. Jetzt kommt jedoch immer die Meldung: "MS-Outlook kann nicht gestartet werden. Das Befehlszeilenargument ist ungültig. Überprüfen Sie den verwendeten Befehl."
Er tritt auf, wenn in "Private Sub Mail( _ ..." Call ShellExecute(0&, "Open", "mailto:" + eMail + _
"?Subject=" + Subject + "&Body=" + Body, "", "", 1)
durchgeführt wird.
Hoffentlich kannst Du auch da helfen. Danke!
Gruß Klaus
Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
15.05.2009 12:47:04
Lang
Hatte ich vergessen anzuhängen:

Sub MailVersenden()
Dim rng As Range
Dim sMail As String, sSubject As String
Dim sBody As String
Dim iRow As Integer, iCol As Integer
sMail = "nc-langkl7@netcologne.de"
sSubject = "Anforderung Aktivierungscode"
ActiveSheet.Unprotect
Set rng = Range("A1").CurrentRegion
For iCol = 1 To rng.Columns.count
For iRow = 1 To rng.Rows.count
sBody = sBody & vbCrLf & rng.Cells(iRow, iCol) & " "
Next iRow
Next iCol
MsgBox "sbody = " & sBody
Call Mail(sMail, sSubject, sBody)
End Sub


Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
15.05.2009 17:51:40
Roland
Hallo Klaus,
den Fehler kann ich nicht reproduzieren, dein Code läuft bei mir einwandfrei. Tritt das Problem auch nach einem Rechnerneustart auf?
Gruß
Roland Hochhäuser
AW: Wie Zeilenumbruch bei Email-Erstellung
16.05.2009 13:32:50
Lang
Hallo Roland,
die Fehlermeldung tritt nun nicht mehr auf. Leider erfolgt jedoch kein Zeilenumbruch. Habe inzwischen auch mit anderen Beispielen erfolglos herumexperimentiert. Ich schaffe es einfach nicht einen in A1 bis A22 stehenden Text als Block in das Email-Programm einzufügen. Mit "As String" geht eine Zeile. Zu "Range" erfolgen nur Fehlermeldungen.
Als Lösung habe ich gefunden und angepasst:

Sub AktiviAnfordern()
Dim outObj As Object
Dim Mail As Object
Application.StatusBar = "Email-Programmaufruf um Aktivierungscode anzufordern..."
Set outObj = CreateObject("Outlook.application")
Set Mail = outObj.CreateItem(0)
Application.StatusBar = "Email-Programmaufruf um Aktivierungscode anzufordern..."
Mail.Subject = "Zusendung Aktivierungscode für PrüfNr.: " & [VersionPlBilAktivi]
Mail.Body = "Hinweise für Absender:" & vbCrLf & _
"Zusätzliche Mitteilungen bitte am Ende dieser Email anstelle '(keine)' eingeben." & vbCrLf &  _
_
"ÄNDERUNGEN AN DEM VORGEGEBENEM TEXT ERMÖGLICHEN KEINE BEARBEITUNG." & vbCrLf & _
"--------------------------------------------------------------------------------------------- _
---------------------------------------------" & vbCrLf & _
"Anforderung Aktivierungscode" & vbCrLf & _
"Von: " & vbCrLf & _
"Zweigstelle HS-Muster GmbH" & vbCrLf & _
"Musterstraße 8" & vbCrLf & _
"99999 Musterstadt / Deutschland" & vbCrLf & _
"Ansprechpartner:" & vbCrLf & _
"Herr Manfred Muster" & vbCrLf & _
"Tel.: 0999/9999901" & vbCrLf & _
"Email: mmuster1@.mmm.de" & vbCrLf & vbCrLf & _
"An:" & vbCrLf & _
"Zentrale MM-Muster GmbH " & vbCrLf & vbCrLf & _
"Hiermit wird der Aktivierungscode angefordert für die EDV-Umstellung" & vbCrLf & _
"-> PrüfNr.: " & [VersionPlBilAktivi] & vbCrLf & _
"-> installiert am: " & vbCrLf & _
"-> installiert für (urspr.) User: (Mustermann1) Musterfrau" & vbCrLf & _
"-> Die Richtigkeit der vorgegebenen Angaben wir bestätigt" & vbCrLf & _
"     bzw. erforderliche Änderungen sind nachfolgend aufgeführt." & vbCrLf & _
"---------------------------------------------------------------------------------------" &  _
vbCrLf & _
"Änderungen zu obigen Angaben bzw. sonstige Mitteilungen:" & vbCrLf & _
"(keine)"
Mail.To = "nc-langkl7@netcologne.de"
Mail.display
Application.StatusBar = False
Set Mail = Nothing
Set outObj = Nothing
End Sub


Zwei Dinge hätte ich gerne damit zusätzlich gelöst:
1. Keine Anbindung an "Set outObj = CreateObject("Outlook.application"),
also Unabhängigkeit vom genutzten Email-Programm und
2. beim VERKETTEN von Text mit einem Datumsfeld kommt immer der
Zahlenwert des Datums und nicht das Datumsformat. Was muß ich da ändern?
Vielen Dank vorab!
Gruß Klaus

Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
16.05.2009 15:29:03
Lang
Hallo Roland,
zu "2. beim VERKETTEN von Text mit einem Datumsfeld ..." hat sich erledigt, da ich die richtige Formel gefunden habe.
Gruß Klaus
AW: Wie Zeilenumbruch bei Email-Erstellung
16.05.2009 22:44:34
Roland
Hallo Klaus,
mit deinem neuen Code wird immer nur Outlook gestartet, wenn du unabhängig davon das jeweils auf dem Rechner installierte Standard-Emailprogramm starten willst, dann bleibe beim alten Code.
2. Mir ist ehrlich gesagt schleierhaft, was nicht klappt. Lade doch einfach mal die Tabelle, mit der das nicht klappt, hoch, und ich sehe mir die Sache mal an.
Gruß
Roland Hochhäuser
Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
18.05.2009 13:41:45
Lang
Hallo Roland,
auf die Tabelle kann zugeriffen werden über den Link https://www.herber.de/bbs/user/61894.xls .
Sie wurde in "61894.xls" umbenannt.
Vielen Dank für Deine Mühen!
Gruß Klaus
AW: Wie Zeilenumbruch bei Email-Erstellung
18.05.2009 16:31:45
Roland
Hallo Klaus,
das hier müsste gehen:
Option Explicit
Private Declare Function ShellExecute Lib "shell32.dll" _
Alias "ShellExecuteA" (ByVal hwnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Private Sub Mail( _
eMail As String, _
Optional Subject As String, _
Optional Body As String)
Call ShellExecute(0&, "Open", "mailto:" + eMail + _
"?Subject=" + Subject + "&Body=" + Body, "", "", 1)
End Sub


Sub MailVersenden()
Dim rng As Range
Dim sMail As String, sSubject As String
Dim sBody As String
Dim iRow As Integer, iCol As Integer
sMail = "nc-langkl7@netcologne.de"
sSubject = "Anforderung Aktivierungscode"
ActiveSheet.Unprotect
Set rng = Range("A1").CurrentRegion
For iCol = 1 To rng.Columns.Count
For iRow = 1 To rng.Rows.Count
sBody = sBody & vbCrLf & rng.Cells(iRow, iCol).Value
Next iRow
Next iCol
sBody = Application.WorksheetFunction.Substitute(sBody, vbCrLf, "%0D%0A")
Call Mail(sMail, sSubject, sBody)
End Sub


Rückmeldung wäre schön.
Gruß
Roland Hochhäuser

Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
19.05.2009 10:42:34
Lang
Roland - Tausend Dank!
Es funktioniert wie gewollt! Jetzt kann ich am Donnerstag bis Mitte Juni beruhigter in Urlaub fahren.
Alles Gute!
Gruß Klaus
AW: Wie Zeilenumbruch bei Email-Erstellung
19.05.2009 12:44:25
Roland
Na dann leg Dich mal in die Sonne und lass es Dir gut gehen ;-))
Roland Hochhäuser
AW: Wie Zeilenumbruch bei Email-Erstellung
20.05.2009 09:28:33
Klaus
Hallo Roland,
ein "Problemchen" gibt es noch. Sobald in einer Textzeile z.B. zwei Namen mit "&" verbunden sind, werden alle nachfolgenden Zeilen nicht in das Email-Programm übernommen. Ersetze ich es mit "u." gibt es keine Probleme. Aber die Chefs wollen den Firmennamen richtig dargestellt sehen. Also nicht "Hermann1 u. Hermann2" sondern "Hermann1 & Hermann2".
Vielleicht hast Du eine Lösung? Hat aber Zeit bis Mitte Juni, denn jetzt wird abgeschaltet.
Gruß Klaus
Anzeige
AW: Wie Zeilenumbruch bei Email-Erstellung
20.05.2009 10:51:02
Roland
Hallo Klaus,
dann ergänze so:
. . .
sBody = Application.WorksheetFunction.Substitute(sBody, vbCrLf, "%0D%0A")
sBody = Application.WorksheetFunction.Substitute(sBody, "&", "%26")
Call Mail(sMail, sSubject, sBody)
Gruß
Roland Hochhäuser
Anzeige
Anzeige

Infobox / Tutorial

Zeilenumbruch bei Email-Erstellung in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um einen Zeilenumbruch in einer Email zu integrieren, die du über Excel und VBA versendest, kannst du folgende Schritte befolgen:

  1. Öffne Excel und gehe in den VBA-Editor (Alt + F11).
  2. Füge ein neues Modul hinzu:
    • Klicke auf "Einfügen" > "Modul".
  3. Füge den folgenden VBA-Code ein:
Private Declare Function ShellExecute Lib "Shell32.dll" _
Alias "ShellExecuteA" (ByVal hWnd As Long, _
ByVal lpOperation As String, ByVal lpFile As String, _
ByVal lpParameters As String, ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long

Private Sub Mail( _
    eMail As String, _
    Optional Subject As String, _
    Optional Body As String)
    Call ShellExecute(0, "Open", "mailto:" + eMail + _
    "?Subject=" + Subject + "&Body=" + Body, "", "", 1)
End Sub

Sub MailVersenden()
    Dim rng As Range
    Dim sMail As String, sSubject As String
    Dim sBody As String
    Dim iRow As Integer, iCol As Integer
    sMail = "deineemail@beispiel.de"
    sSubject = "Betreff deiner Email"
    Set rng = Range("A1").CurrentRegion
    For iCol = 1 To rng.Columns.Count
        For iRow = 1 To rng.Rows.Count
            sBody = sBody & vbCrLf & rng.Cells(iRow, iCol).Value
        Next iRow
    Next iCol
    Call Mail(sMail, sSubject, sBody)
End Sub
  1. Ändere die Email-Adresse (sMail) und den Betreff (sSubject) nach deinen Wünschen.
  2. Speichere das Projekt und führe MailVersenden aus.

Mit diesem Code kannst du den vbCrLf-Befehl verwenden, um einen Zeilenumbruch im mailto-Body zu erzeugen.


Häufige Fehler und Lösungen

  • Fehler: "Microsoft Outlook kann nicht gestartet werden. Das Befehlszeilenargument ist ungültig."

    • Lösung: Stelle sicher, dass deine Email-Adresse und der Body korrekt formatiert sind. Überprüfe auch, ob du vbCrLf korrekt verwendest.
  • Problem: Kein Zeilenumbruch in der Email.

    • Lösung: Achte darauf, dass du vbCrLf in die Body-Zusammenstellung einfügst, bevor du die Email sendest.

Alternative Methoden

Falls du nicht an Outlook gebunden sein möchtest, kann eine alternative Methode sein, das Email-Programm über CreateObject zu starten. Hier ein Beispiel:

Sub AlternativeMailVersenden()
    Dim outObj As Object
    Dim Mail As Object
    Set outObj = CreateObject("Outlook.Application")
    Set Mail = outObj.CreateItem(0)
    Mail.Subject = "Betreff"
    Mail.Body = "Hier ist der Text." & vbCrLf & "Mit einem Zeilenumbruch."
    Mail.To = "deineemail@beispiel.de"
    Mail.Display
End Sub

Diese Methode ist jedoch spezifisch für Outlook und könnte nicht in anderen Programmen funktionieren.


Praktische Beispiele

Hier sind einige Anwendungsbeispiele für den Zeilenumbruch in Emails:

  1. Einfacher Text mit Zeilenumbruch:
sBody = "Hallo," & vbCrLf & "hier ist ein Zeilenumbruch." & vbCrLf & "Bis bald!"
  1. Daten aus einem Bereich:
Dim rng As Range
Set rng = Range("A1:A5") ' Definiere den Bereich
For Each cell In rng
    sBody = sBody & cell.Value & vbCrLf
Next cell

Tipps für Profis

  • Verwende Application.WorksheetFunction.Substitute um spezielle Zeichen (z.B. &) im Body zu ersetzen, um Probleme beim Email-Versand zu vermeiden:
sBody = Application.WorksheetFunction.Substitute(sBody, "&", "%26")
  • Teste immer deinen Code mit verschiedenen Email-Programmen, um sicherzustellen, dass alles wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Frage
Wie kann ich den Zeilenumbruch im mailto-Body sicherstellen?
Antwort: Verwende vbCrLf in deinem Body-String, um einen Zeilenumbruch zu erzeugen.

2. Frage
Funktioniert das auch mit anderen Email-Programmen als Outlook?
Antwort: Ja, der ursprüngliche Code verwendet mailto, was mit jedem Email-Programm funktioniert, das das mailto-Protokoll unterstützt.

3. Frage
Warum tritt die Fehlermeldung "Das Befehlszeilenargument ist ungültig" auf?
Antwort: Diese Fehlermeldung kann auftreten, wenn die Email-Adresse oder der Body nicht korrekt formatiert sind. Vergewissere dich, dass alle verwendeten Zeichen gültig sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige