2016-06-23 9 views
0

Ich versuche, ein Makro zu schreiben, das einen Platzhalter von Excel nach Outlook-Kalender sendet mit einem .oft Termin Vorlage.Excel VBA in Outlook-Termin - Ersetzen Sie Funktionsstriche Formatierung

Wenn die Funktion wie das Ersetzen mit:

Dim oMail as Object 
Set myOlApp = CreateObject("Outlook.Application") 

Set oMail = myOlApp.CreateItemFromTemplate(path) 

(...)

strFind = "Value" 
strNew = Cells(x ,y) 
oMail.body = Replace (oMail.body, strFind, strNew) 

Ernennung als Plain-Text herauskommt, werden alle Formatierungen gestrippt. Schriften, Links und sogar die Unterschrift.

Wenn ich den Wert .body zu .HTMLbody ändern, funktioniert die Ersetzungsfunktion nicht, Vorlage kommt nicht bearbeitet. Ich möchte den E-Mail-Inhalt nicht als Code in den Code einfügen, da sie sich manchmal ändern und ich das Makro jedes Mal anstelle der Vorlage bearbeiten würde.

Irgendwelche Vorschläge, bitte? Mir gingen die Ideen aus.

+0

Kopieren Sie alles in ein leeres Word-Dokument und dann tun, um die Ersetzung im Word-Dokument. Sobald Sie fertig sind, können Sie den Inhalt in Outlook kopieren. – Ralph

+0

Das ist ein guter Workaround, danke. Allerdings würde ich dieses Problem eher lösen, da es scheint, dass ich etwas falsch definiere, als direkt zu Workarounds. Wenn es keine andere Lösung gibt, werde ich das verwenden. – Ver

+0

Lassen Sie mich wissen, wenn Sie etwas finden. Ich wäre auch interessiert. Ich habe diese Frage (in anderen Formen) schon oft gesehen und jedes Mal war die Lösung MS Word zu verwenden. Wenn Sie etwas Neues finden würden, wäre ich sehr überrascht und interessiert. – Ralph

Antwort

0

Die body-Eigenschaft von oMail ist reiner Text. RTFbody hat alle Formatierungen, aber es ist ein Byte-Array

Dim oMail as Outlook.AppointmentItem 
Set myOlApp = CreateObject("Outlook.Application") 

Set oMail = myOlApp.CreateItemFromTemplate(path) 

Dim RegulareString As String 

'convert from byte array to a string 
RegulareString = StrConv(pushAppt.RTFBody, vbUnicode) 

'do your replacements 
RegulareString = Replace(RegulareString , strFind, strNew) 

'convert back to byte array 
Dim theBytes() As Byte 
theBytes = StrConv(RegulareString , vbFromUnicode) 

oMail.RTFBody = theBytes 
oMail.Display 
+0

Hallo! Danke dafür, ich werde es morgen überprüfen! – Ver