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> </o:p></p><p class=MsoNormal>#%DAS%#IST#% VIEL#%MEHR%#TEXT#%<o:p></o:p></p><p class=MsoNormal><o:p> </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.
|