2016-06-23 3 views
0

Я пытаюсь написать макрос, который отправляет местозаполнитель из Excel в Outlook Calendar, с использованием .0000 .Excel VBA в Outlook Appointment - Заменить форматирование функциональных полос

При использовании функции замены так:

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) 

Назначение выходит в открытый текст, все форматирование удаляется. Шрифты, ссылки и даже подпись.

Если я изменил значение .body на .HTMLbody, функция замены не работает, шаблон выходит неотредактированным. Я не хочу помещать содержимое электронных писем в тело в код, поскольку они меняются иногда, и это заставит меня редактировать макрос каждый раз, а не шаблон.

Любые предложения, пожалуйста? У меня кончились идеи.

+0

Копировать все в пустой текстовый документ, а затем сделать замену в документе слова. Как только вы закончите, вы можете скопировать содержимое в Outlook. – Ralph

+0

Это хорошее обходное решение, спасибо. Однако я предпочел бы решить эту проблему, поскольку кажется, что я определяю что-то неправильно, чем приступать к обходным решениям. Если другого решения нет, я буду использовать это. – Ver

+0

Дайте мне знать, если найдете что-нибудь. Мне тоже было бы интересно. Я неоднократно видел этот вопрос (в других формах) и каждый раз, когда решение заключалось в использовании MS Word. Если бы вы нашли что-то новое, я был бы очень удивлен и заинтересован. – Ralph

ответ

0

Собственность тела oMail - это простой текст. RTFbody имеет все форматирование, но это байтовый массив

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

Привет! Спасибо за это, я проверю это завтра! – Ver

Смежные вопросы