Вероятно, проще всего это сделать, создав .oft (шаблон электронной почты Outlook) с телом сообщения и заполнителем для "региона" и таблицы. Создайте шаблон без подписи, он будет добавлен автоматически в соответствии с вашими настройками пользователя Outlook, позже. Я создаю такой шаблон и сохраняю как .oft:
Затем просто создайте новый почтовый элемент с Set OutlookMailitem = OutlookApp.CreateItemFromTemplate({path to your template.oft})
, замените заполнитель "region" и скопируйте / вставьте таблицу в местоположение заполнителя таблицы.
Option Explicit
Sub foo()
Dim objOutlook As Outlook.Application
Dim objMsg As Outlook.MailItem
Dim wdDoc As Word.Document
Dim tblRange As Word.Range
Dim region As String
' define your Region, probably this is done in a loop...
region = "Region 1"
Set objOutlook = CreateObject("Outlook.Application")
' Create email from the template file // UPDATE WITH YOUR TEMPLATE PATH
Set objMsg = objOutlook.CreateItemFromTemplate("C:\path\to\your\template.oft")
objMsg.Display
Set wdDoc = objOutlook.ActiveInspector.WordEditor
' replace placeholder with region:
wdDoc.Range.Find.Execute "{{REGION PLACEHOLDER}}", ReplaceWith:=region
' in my template, paragraph 5 is the table placeholder, modify as needed:
Set tblRange = wdDoc.Range.Paragraphs(5).Range
tblRange.Text = "" ' remove the placeholder text
' copy the Excel table // modify to refer to your correct table/range
Sheet1.ListObjects(1).Range.Copy
' paste the table into the email
tblRange.PasteExcelTable False, False, False
End Sub
Как видите, последнее письмо содержит мою подпись по умолчанию (которая была , а не частью файла template.oft).