Thema Datum  Von Nutzer Rating
Antwort
Rot Problem mit Outlook VBA .BodyFormat olFormatHTML olFormatRichText und .HTMLBody
18.09.2018 12:56:59 $3v|\|
NotSolved

Ansicht des Beitrags:
Von:
$3v|\|
Datum:
18.09.2018 12:56:59
Views:
1138
Rating: Antwort:
  Ja
Thema:
Problem mit Outlook VBA .BodyFormat olFormatHTML olFormatRichText und .HTMLBody

Hallo zusammen
verwendetes System: Windows 7, Outlook 2013
Ich habe nur grundlegende Erfahrung in VBA, HTML und CSS (Gelegenheitsprogrammierer)

ich habe folgendes Problem:

Ich möchte beim E-Mail schreiben (auch beim Antworten und Weiterleiten) mit VBA einen bestimmten Text (mit Sonderzeichen %,:,= und #) durch einen anderen Text ersetzen.
Die Formatierung sollte erhalten bleiben. Dadurch kommt nur RichText und HTML E-Mail in Frage.
Da ich keinerlei Erfahrung mit Rich-Text Bearbeitung habe und dies nicht wirklich trivial ist bleib nur noch HTML E-Mail übrig.

Da das VBA-Script auch für Weiterleiten und Antworten funktionieren soll, kann ich den myItem.HTMLBody auch nicht einfach mit neuem Code überschreiben.

Wenn ich die E-Mail als HTML E-Mail bearbeite, dann erhalte ich erstens einen wahnsinnig großen Overhead im HTML-HEAD ( so groß, dass myItem.HTMLBody nicht einmal mehr in den Direktbereich passt) und zweitens zerhackt es mir meinen Text im HTML-BODY mit unnötig vielen HTML-Tags  (z.B. <body lang=DE link="#0563C1" vlink="#954F72" style='tab-interval:35.4pt'><div class=WordSection1><p class=MsoNormal>#%das%#ist#%Text%#<o:p></o:p></p><p class=MsoNormal>#%DAS%#IST#%MEHR%#TEXT#%<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>#%DAS%#IST#% VIEL#%MEHR%#TEXT#%<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>)
Es werden sogar einzelne Worte durch Tags zerteilt. (z.B. <p class=MsoNormal><span lang=EN-US style='mso-ansi-language:EN-US'>#%<span class=SpellE>ein:Text</span>%#<o:p></o:p></span></p>). Dies macht die Suche im Text unmöglich.

Ich könnte in myItem.Body suchen ob der Text vorkommt, aber wie bekomme ich dann wieder den Bezug zu der Stelle im myItem.HTMLBody?

Wenn ich im E-Mail-Editor das Format auf RichText umstelle, dann wird der HTMLBody deutlich besser lesbar und aufgeräumter. :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META NAME="Generator" CONTENT="MS Exchange Server version rmj.rmm.rup.rpr">
<TITLE></TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">das</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">%#</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">ist</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%Text%#</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">DAS</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">%#</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">IST</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">MEHR</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">%#</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">TEXT</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">DAS</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">%#</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">IST</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri"></FONT></SPAN><SPAN LANG="de"> <FONT FACE="Calibri">VIEL</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">MEHR</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">%#</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">TEXT</FONT></SPAN><SPAN LANG="de"><FONT FACE="Calibri">#%</FONT></SPAN><SPAN LANG="de"></SPAN></P>

<P DIR=LTR><SPAN LANG="de"></SPAN></P>

</BODY>
</HTML>


Das Problem ist hier aber, dass dies nur eine Ausgabekonvertierung ist und dass nicht alle Formatierungen der E-Mail enthalten sind. Ebenso sind hier keinerlei Bilder enthalten, die in der Original E-Mail eingefügt wurden.

Ein ähnliches Problem habe ich, wenn ich per VBA eine HTML E-Mail auf RichText setze und anschließend wieder zurück nach HTML:
myItem.BodyFormat = olFormatRichText
myItem.BodyFormat = olFormatHTML
Dann ist zwar der HTML Code bereinigt (zwar nur bis ich im E-Mail Editor wieder eine Änderung mache) aber alle Bilder in der E-Mail sind verschwunden. Unter myItem.Attachments sind sie noch vorhanden, doch der Bezug in der E-Mail fehlt.
Ausserdem verliert der Text meistens die Formatierung, da nach der Umstellung erstens eine andere Textart gewählt ist und zweitens in den meisten HTML-Tags zu viele Anführungszeichen sind:
<BR><SPAN LANG="de"><FONT FACE=""Calibri"">Calibri</FONT></SPAN>
<BR><SPAN LANG="de"><FONT FACE=""Tahoma"">Tahoma</FONT></SPAN>
<BR><SPAN LANG="de"><FONT FACE=""Arial"">Arial</FONT></SPAN>

Diese kann ich zwar per VBA ersetzen aber dann darf auch sonst niergends im Text ein doppeltes Anführungszeichen sein, was ich nicht garantieren kann.
 

Mein Code zum testen:

'Option Explicit
Public Sub Analysiere_EMail()
    Dim myItem As Outlook.MailItem
    Dim MyInspector As Outlook.Inspector
    Dim str_plainText As String
    Dim strRTF As String
    Dim strHTML As String
    Dim strSearch As String
    Dim strReplace As String

    Set MyInspector = Application.ActiveInspector()
    Set myItem = MyInspector.CurrentItem
    Debug.Print "-------------------------------------------"
    Select Case myItem.BodyFormat
        Case olFormatHTML
            Debug.Print "Format = HTML"
        Case olFormatPlain
            Debug.Print "Format = Plain"
        Case olFormatRichText
            Debug.Print "Format = Rich-Text"
        Case olFormatUnspecified
            Debug.Print "Format = Unspecified"
        Case Else
            ' Nicht unterstützt
            Debug.Print "Format = Fehlerhaft"
    End Select
    Debug.Print myItem.Attachments.Count
    Stop
    Debug.Print "-------------------------------------------"
    str_plainText = myItem.Body
    Debug.Print str_plainText
    Stop
    Debug.Print "-------------------------------------------"
    strRTF = StrConv(myItem.RTFBody, vbUnicode)
    Debug.Print strRTF
    Stop
    Debug.Print "-------------------------------------------"
    strHTML = myItem.HTMLBody
    Debug.Print strHTML
    Stop
    Debug.Print "-------------------------------------------"
Stop
'######################################
myItem.BodyFormat = olFormatRichText

Stop
    Debug.Print "-------------------------------------------"
    strRTF = StrConv(myItem.RTFBody, vbUnicode)
    Debug.Print strRTF
    Stop
    Debug.Print "-------------------------------------------"
    strHTML = myItem.HTMLBody
    Debug.Print strHTML
    Stop

    '---------------------------------------------------------
    ' Enthält die Nachricht zuviele Anführungszeichen?
    '---------------------------------------------------------
    strSearch = """""" ' = ""
    strReplace = """"   ' = "

    If InStr(myItem.HTMLBody, strSearch) Then
        Debug.Print "#### zu viele Anführungszeichen ###"
        Stop
        '-----------------------------------------------------
        ' HTML-Nachricht ersetzen, damit Formatierung wieder passt
        '-----------------------------------------------------
        myItem.HTMLBody = Replace(myItem.HTMLBody, strSearch, strReplace)
    End If
    Debug.Print "-------------------------------------------"
Stop
'######################################
myItem.BodyFormat = olFormatHTML
    Stop
    Debug.Print "-------------------------------------------"
    strRTF = StrConv(myItem.RTFBody, vbUnicode)
    Debug.Print strRTF
    Stop
    Debug.Print "-------------------------------------------"
    strHTML = myItem.HTMLBody
    Debug.Print strHTML
    Stop
    Debug.Print "-------------------------------------------"
Stop
End Sub

Das war jetzt sehr viel Text aber ich hoffe, dass jemand versteht was mein Problem ist und dass er/sie mir helfen kann.
Vielleicht kann auch jemand überprüfen, ob das Problem bei anderen Versionen weiterhin besteht.

 

Danke.


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot Problem mit Outlook VBA .BodyFormat olFormatHTML olFormatRichText und .HTMLBody
18.09.2018 12:56:59 $3v|\|
NotSolved