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

Forumthread: E-Mail-Versand per VBA - Leerzeichen in Variable

E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 09:52:15
Matthias
Hallo liebes Forum.
Folgendes Problem, an dem ich mir nun schon eine Weile die Zähne ausbeiße:
Ich führe regelmäßig eine Prüfung im Excel durch. Einen Teil der zu prüfenden Dinge übernehmen aber Kollegen. Diese werden Per Mail darüber informiert, dass eine neue Datei zur Prüfung vorliegt.
Ich habe es so weit hinbekommen, dass automatisch eine Mail generiert wird, die die Kollegen darüber informiert, was zu tun ist. Das Problem dabei:
Ich generiere über eine Variable einen Link, dem die Kollegen aus der Mail heraus folgen sollen. Leider enthält der Link Leerzeichen, wodurch der Link abgeschnitten wird.
Ich habe zwar schon diverse Lösungsansätze im Netz gefunden (Leerzeichen maskieren, Hochkommas), aber leider bekomme ich diese nicht umgesetzt, da ich Sie nicht richtig verstehe.
Hier mal der Code:

Set oApp = CreateObject("OUTLOOK.Application")
With oApp.CreateItem(0)
.Subject = "ZPL-Prüfliste" & "_" & AG
.To = "xxx.xxxl@yyy-yyy.de"
'.Cc = CCAdr
.Importance = 2
.Display
.htmlbody = "Liebe Kollegen, " & Chr(13) & Chr(13) & "unter " & "a href=" &  Pfad & "ZPL-Prü _
fliste" & "_" & AG & ".xls"">diesem Link" & " findet Ihr eine aktuelle Prüfliste zur " & "AG " & AG & "." & Chr(13) & "Bitte bearbeiten und Bemerkungsfeld ausfüllen."
Set .SendUsingAccount = .Session.Accounts.Item("xxx@yyy-yyy.de")
.Send
End With
Die variablen Pfad und AG werden vorher ausgelesen. In der Variablen Pfad sind mehrer Leerzeichen enthalten, die den Link kaputt machen.
Die
Ich freue mich auf eure Lösungsansätze.
Mfg Matze
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 10:15:11
mumpel
Hallo!
Option Explicit

Public Sub EinfacheMailMitAnhang()

Dim olApp     As Object
Dim AWS       As String
Dim olOldbody As String
Dim strPfad   As String
Dim strAG     As String

strPfad = "http://www.seite.de/"
strAG = "Baumann"

ActiveWorkbook.Save
AWS = ActiveWorkbook.FullName

Set olApp = CreateObject("Outlook.Application")

    With olApp.CreateItem(0)
              .GetInspector.Display
              olOldbody = .htmlBody
              .To = "testserver.de"
              .Subject = "Test"
              .htmlBody = "Hallo!<br><br>Anbei gewünschte Informationen.<br><br>" & _
                          "hier der <a href=""" & strPfad & "ZPL-Prüfliste_" & _
                          strAG & ".xls"">Datei zum Herunterladen</a>" & _
                          "<br><br>Gruß,<br>Max<br><br>" & olOldbody
              .Attachments.Add AWS
    End With

End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0

Sollte die Datei auf einer Festplatte liegen muss man den Link anders schreiben.
Gruß, René
Anzeige
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 10:22:13
UweD
Hallo
reicht es nicht, wenn du die Leerzeichen ersetzt?
Pfad = Replace(Pfad, " ", "_")
LG UweD
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 11:57:45
UweD
Hallo nochmal
hab gerade mal nachgelesen... https://wiki.selfhtml.org/wiki/URL-Codierung
mit
Pfad = Replace(Pfad, " ", "%20")
vorher austauschen
LG UweD
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 10:22:24
Werner
Hallo Matze,
bevor du deine Variable Pfad im Link verwendest:
Pfad = Replace(Pfad, " ", "") 'Leerzeichen entfernen
oder
Pfad = Replace(Pfad, " ", "_")'Leerzeichen durch Unterstrich ersetzen
Gruß Werner
Anzeige
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 11:08:54
Matthias
Hallo Uwe und Werner.
Vielen Dank für eure Vorschläge.
Diese zielen ja darauf ab, den Pfad zu verändern. Es handelt sich dabei ja aber um einen lokalen Netzwerkpfad im Firmen-Netzwerk. Wenn ich also die Pfadbezeichnung im Link verändere, kommt der Link ja nicht mehr an der richtigen Stelle an, damit funktioniert das System nicht mehr.
Ich hab dennoch eure Lösung probiert, dort bekommen ich einen Error 400. Da bin ich leider genauso ratlos, was da nun wieder das Problem ist.
Hallo Rene.
Deine Lösung sieht interessant aus, leider verstehe ich Sie nicht so ganz. Könntest du mir dirt noch ein paar Erläuterungen geben?
In deinem gewählten Beispiel handelt es sich um einen Weblink, dieser ist ohne Leerzeichen, daher verstehe ich nicht so ganz, was du gemacht hast.
Dateianhang möchte ich keinen generieren, das AWS kann also raus.
Was macht der Befehl .GetInspector.Display?
Was bedeutet das in dem html-code?
Was hat es mit dem olOldbody auf sich?
Ich verstehe nicht was olOldbody = .htmlBody und am Ende des E-Mailtextes & olOldbody bedeuten soll.
Ich kann leider in dem Code nicht erkennen, wo das Problem mit dem Leerzeichen gelöst wird. Kannst du mir das noch mal etwas genauer erläutern? Ich möchte gern verstehen, was hier passiert.
Mfg Matze
Anzeige
AW: E-Mail-Versand per VBA - Leerzeichen in Variable
21.06.2017 12:46:03
mumpel
Wenn Du mein Beispiel nimmst müsste es funktionieren.
"olOldBody" ist für die Signatur. Normalerweise wird der gesamte Body überschrieben. Daher ruft man die Email über "GetInspector.Display" auf, speichert die Signatur zwischen und hängt sie am Schluß wieder an.
In Deinem Code fehlte nur ein Anführunsgzeichen, daher wurde der Link nicht korrekt übersetzt.
"<
" ist die HTML-Anweisung für eine Leerzeile. Ich arbeite immer mit HTML-Mail (.htmlBody) anstatt Nur-Text-Mail (.Body).
Anzeige
Nachtrag
21.06.2017 12:47:59
mumpel
Was macht der Server da? Hat was umgesetzt was nicht umgesetzt werden sollte.
Also <br> ist eine HTML-Zeilenumbruchanweisung.
AW: Nachtrag
21.06.2017 14:26:07
Matthias
Hallo Rene.
Vielen lieben Dank, nun funktioniert es.
Mfg Matze
Nachtrag 2
21.06.2017 12:53:16
mumpel
Ein lokaler Link müsste auch funktionieren. Outlook setzt das automatisch richtig um.
Public Sub EinfacheMailMitAnhang()

Dim olApp     As Object
Dim olOldbody As String
Dim strPfad   As String
Dim strAG     As String

strPfad = "C:\"
strAG = "Baumann"


Set olApp = CreateObject("Outlook.Application")

    With olApp.CreateItem(0)
              .GetInspector.Display
              olOldbody = .htmlBody
              .To = "testserver.de"
              .Subject = "Test"
              .htmlBody = "Hallo!<br><br>Anbei gewünschte Informationen.<br><br>" & _
                          "hier der <a href=""" & strPfad & "ZPL-Prüfliste_" & _
                          strAG & ".xlsm"">Datei zum Herunterladen</a>" & _
                          "<br><br>Gruß,<br>Max<br><br>" & olOldbody
    End With

End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

E-Mail-Versand per VBA: Probleme mit Leerzeichen in Variablen lösen


Schritt-für-Schritt-Anleitung

  1. Problem verstehen: Du hast eine Variable, die einen Pfad enthält, der Leerzeichen aufweist. Diese Leerzeichen führen dazu, dass der Link in der E-Mail nicht korrekt funktioniert.

  2. VBA-Code anpassen: Um die Leerzeichen im URL-Pfad zu umgehen, kannst du den Replace-Befehl verwenden. Hier ist ein Beispiel:

    Pfad = Replace(Pfad, " ", "%20") ' Leerzeichen durch %20 ersetzen

    Damit wird das Leerzeichen in der URL umgewandelt, was sicherstellt, dass der Link korrekt funktioniert.

  3. E-Mail erstellen: Verwende die angepasste Variable im E-Mail-Body:

    .htmlBody = "Hier ist der Link: <a href=""" & Pfad & """>Datei herunterladen</a>"

    Achte darauf, die Anführungszeichen korrekt zu setzen.


Häufige Fehler und Lösungen

  • Fehler 400: Wenn du einen Fehler 400 erhältst, kann es daran liegen, dass ein Anführungszeichen im Code fehlt. Überprüfe den gesamten Code auf fehlende Zeichen.

  • Link funktioniert nicht: Stelle sicher, dass der Pfad korrekt ersetzt wurde. Überprüfe, ob du Replace(Pfad, " ", "%20") in der richtigen Reihenfolge aufrufst, bevor du den Link in die E-Mail einfügst.


Alternative Methoden

  • Leerzeichen entfernen: Anstelle der Umwandlung in %20 kannst du auch die Leerzeichen komplett entfernen oder durch Unterstriche ersetzen:

    Pfad = Replace(Pfad, " ", "") ' Leerzeichen entfernen

    oder

    Pfad = Replace(Pfad, " ", "_") ' Leerzeichen durch Unterstrich ersetzen
  • HTML-Codierung: Wenn du mit HTML arbeitest, kannst du auch HTML-Tags nutzen, um Leerzeilen einzufügen. Verwende <br> für Zeilenumbrüche in deinem htmlBody.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine E-Mail mit einem Link generierst, der Leerzeichen korrekt behandelt:

Sub SendEmail()
    Dim oApp As Object
    Dim Pfad As String
    Dim AG As String

    Pfad = "C:\Mein Ordner\ZPL-Prüfliste " ' Beispielpfad mit Leerzeichen
    AG = "Baumann"

    ' Leerzeichen umwandeln
    Pfad = Replace(Pfad, " ", "%20")

    Set oApp = CreateObject("OUTLOOK.Application")
    With oApp.CreateItem(0)
        .To = "kollege@example.com"
        .Subject = "ZPL-Prüfliste"
        .htmlBody = "Hier ist der Link: <a href=""" & Pfad & "ZPL-Prüfliste_" & AG & ".xls"">Datei herunterladen</a>"
        .Send
    End With
End Sub

Tipps für Profis

  • Verwende .htmlBody: Wenn du E-Mails mit HTML versendest, nutze .htmlBody für Formatierungen. Dies ermöglicht dir, Links und Formatierungen einfacher zu gestalten.

  • Testen in verschiedenen Outlook-Versionen: Teste deinen Code in verschiedenen Versionen von Outlook, um sicherzustellen, dass er überall funktioniert. Der Code wurde in Office 16 getestet.

  • E-Mail-Signatur einfügen: Wenn du die Outlook-Signatur einfügen möchtest, nutze GetInspector.Display, um den aktuellen Body der E-Mail zu speichern und später wieder einzufügen.


FAQ: Häufige Fragen

1. Was ist die Bedeutung von olOldBody? olOldBody speichert den ursprünglichen Body der E-Mail, bevor Änderungen vorgenommen werden. Dies ist nützlich, um z.B. eine Signatur am Ende wieder hinzuzufügen.

2. Wie kann ich Leerzeilen in meiner Outlook-Signatur entfernen? Um Leerzeilen am Anfang deiner Outlook-Signatur zu entfernen, kannst du diese direkt in den Outlook-Einstellungen anpassen.

3. Was bedeutet htmlBody in VBA? htmlBody ist die Eigenschaft, die es dir ermöglicht, HTML-formatierte E-Mails zu senden. Dies ist wichtig, um Links, Bilder und Formatierungen korrekt anzuzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige