Часто этот вопрос задают в контексте функции RangeToHTML
Рона де Брейна, которая создает HTML PublishObject
из Excel.Range
, извлекает его через FSO и вставляет полученный поток HTML в * 1004 сообщения электронной почты. *. При этом удаляется подпись по умолчанию (функция RangeToHTML
имеет вспомогательную функцию GetBoiler
, которая пытается вставить подпись по умолчанию).
К сожалению, плохо документированный метод Application.CommandBars
недоступен через Outlook:
wdDoc.Application.CommandBars.ExecuteMso "PasteExcelTableSourceFormatting"
Это повысит время выполнения 6158:
Но мы все еще можем использовать Word.Document
, который доступен с помощью метода MailItem.GetInspector
, мы можем сделать что-то вроде этого, чтобы скопировать и вставить выбор из Excel в тело письма Outlook, сохранив вашу подпись по умолчанию (если есть один).
Dim rng as Range
Set rng = Range("A1:F10") 'Modify as needed
With OutMail
.To = "xxxxx@xxxxx.com"
.BCC = ""
.Subject = "Subject"
.Display
Dim wdDoc As Object '## Word.Document
Dim wdRange As Object '## Word.Range
Set wdDoc = OutMail.GetInspector.WordEditor
Set wdRange = wdDoc.Range(0, 0)
wdRange.InsertAfter vbCrLf & vbCrLf
'Copy the range in-place
rng.Copy
wdRange.Paste
End With
Обратите внимание, что в некоторых случаях это может не полностью сохранить ширину столбца или в некоторых случаях высоту строки, и хотя он также будет копировать фигуры и другие объекты в диапазоне Excel, это также может вызвать некоторые проблемы с выравниванием, но для простые таблицы и диапазоны Excel, это очень хорошо: