Изображение не заменит текст в теле письма, если оно не отображается, почему? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть отчет, который я отправляю ежедневно.В нем есть связанное изображение с диапазоном, который мне нужно вставить в электронное письмо и отправить.У меня электронное письмо сохранено в виде файла шаблона Outlook, который я при необходимости изменяю.

Код, который я запускаю, запускается из Excel.Я создаю объект Outlook и открываю электронную почту Outlook из файла шаблона .oft.Затем я хочу найти текст идентификатора (*INSERT IMAGE HERE*) и заменить его связанным изображением из Excel, которое было скопировано из буфера обмена.Я пытаюсь добавить его как InLineShape, чтобы он вел себя правильно в теле письма.Благодаря еще одному вопросу, который я задал, я могу правильно заменить текст, вставить изображение, как я хотел, и изменить его размер, но что-то странное начало происходить.

Когда я запускаю макрос как есть, текст не заменяется и изображение не добавляется.Когда я перехожу через него и добавляю короткую строку .Display для устранения неполадок, отображается изображение.Я хотел бы избежать отображения электронного письма, прежде чем отправлять его только в целях эффективности.Я не понимаю, как и почему это происходит.

Вот краткий пример моего кода:

Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookEmail = OutlookApp.CreateItemFromTemplate(templatePath)

ThisWorkbook.Worksheets("Email Sheet").Pictures("Summary Email Screenshot").Copy 

Set EmailWordEditor = OutlookEmail.GetInspector.WordEditor 
Set EmailText = EmailWordEditor.Content 

With EmailText.Find 'Using the .Find method to find the text identifier
    .ClearFormatting
    .text = "*INSERT IMAGE HERE*" 
    .MatchCase = True 
    .MatchWildcards = False 
    If .Execute Then 'If found, delete text, paste image
        EmailText.Delete 
        EmailText.PasteSpecial Placement:=wdInLine 
    End If
End With

EmailWordEditor.InlineShapes(EmailWordEditor.InlineShapes.count).ScaleHeight = 75 
'OutlookEmail.Display 'With this uncommented, the image is loaded properly
OutlookEmail.Send 

Set OutlookApp = Nothing 'Unload the objects properly
Set OutlookEmail = Nothing

Я довольно хорошо разбираюсь в Excel VBA, но это моя первая попытка Outlook и Word VBA, поэтому, пожалуйста, потерпите меня.

РЕДАКТИРОВАТЬ 11/30/18

Я больше изучил проблему и узнал, что при выполнении .Display Excel вызывает определенные проверки для проверки данных в электронном письме.От комментария к другому сообщению о переполнении стека Дмитрия Стребленченко:

Когда вы касаетесь инспектора Outlook (через Display, Close, GetInspector), Outlook запускает дополнительный код, который проверяет ваши данные.Тебе повезло, что он был достаточно умен, чтобы исправить свою привязанность.Если вы не хотите на это полагаться, установите свойство PR_ATTACH_CONTENT_ID явно - так Outlook узнает, какое вложение необходимо использовать для определенного тега img.

Я не хочу касаться тела письмас HTML, поскольку в шаблоне есть содержимое, которое меняется еженедельно до идентификатора *INSERT IMAGE HERE*.Если бы я создавал письмо с нуля, маршрут HTML, вероятно, был бы проще, но я выбрал маршрут .WordEditor, чтобы конкретно обойти эту проблему.Я также вообще не знаю, как кодировать в HTML, поэтому мне будет сложнее решить эту проблему с ним.Можно ли как-то вручную проверить содержимое тела письма, не используя .Display, чтобы Outlook это сделал?

...