Замена текста в электронном письме изображением из буфера обмена - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть отчет, который я отправляю ежедневно.
В нем есть связанное изображение с диапазоном, который мне нужно вставить в электронное письмо и отправить.
У меня есть электронное письмо, сохраненное как файл шаблона Outlook.что я изменяю по мере необходимости.
Код, который я запускаю из Excel.
Я создаю объект Outlook и открываю электронную почту Outlook из файла шаблона .oft, затем я хочу найти текст идентификатора ( ВСТАВЬТЕ ИЗОБРАЖЕНИЕ ЗДЕСЬ ) и замените его связанным изображением из Excel, которое было скопировано из буфера обмена.Я пытаюсь добавить его как InLineShape, чтобы он правильно работал в теле письма.
Я пытался сделать это с помощью определенного WordEditor из тела письма.
Я посмотрел в HTML, чтобысделать это, но я решил, что объект WordEditor будет лучшим подходом.После того, как я вставил его, мне нужно установить высоту шкалы на 0,75, чтобы она правильно отображалась.
Оттуда просто нажмите кнопку Отправить.

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

Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookEmail = OutlookApp.CreateItemFromTemplate(templatePath) 
OutlookEmail.Display 'Just for code checking
ThisWorkbook.Worksheets("Email Sheet").Pictures("Summary Email Screenshot").Copy 
Set EmailText = OutlookEmail.GetInspector.WordEditor 
With EmailText.Range.Find 
    .ClearFormatting
    .Execute findText:="*INSERT IMAGE HERE*", MatchWholeWord:=True, MatchCase:=True, _
        MatchWildcards:=False, ReplaceWith:="^c", Replace:=wdReplaceOne
End With

EmailText.InlineShapes(EmailText.InlineShapes.count).ScaleHeight = 75 
'OutlookEmail.Send

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

1 Ответ

0 голосов
/ 27 ноября 2018

По умолчанию при вставке изображения Word будет использовать параметр «Вставить / вставить изображения», как в «Файл» / «Параметры» / «Дополнительно», раздел «Вырезать, копировать и вставить».Таким образом, на некоторых машинах изображение может быть вставлено как InlineShape, а на других - как Shape.

Если бы вы просто вставляли код, то с помощью PasteSpecial можно было бы указать inline или с переносом текста, используя соответствующее значение перечисления WdOLEPlacement либо wdFloatOverText, либо wdInLine.

ПосколькуКоманда вставки происходит из текста замены ^c, этот подход не будет работать в этой ситуации.Это означает, что настройку параметров необходимо будет изменить.И, чтобы это было удобно для пользователя, в конце кода его нужно вернуть обратно.

Вот пример кода, демонстрирующий, как проверить текущий параметр, изменить его при необходимости и сбросить вконец процедуры.Я не знаком с использованием Word через объектную модель Outlook, но мне кажется, что я правильно создал экземпляр объекта для Word.Application, чтобы VBA, выполняемая в Excel или Outlook, знала, что означает Options.За исключением последней строки, она должна находиться между Set и With в примере кода в вопросе.

Dim wrapType As Long
Dim wordApp as Object

Set wordApp = EMailText.Application
wrapType = wordApp.Options.PictureWrapType
If wrapType <> wdWrapMergeInline Then
    wordApp.Options.PictureWrapType = wdWrapMergeInline
End If
'Do other things, then reset

wordApp.Options.PictureWrapType = wrapType
...