Это работает, если Word используется в качестве редактора электронной почты.Пожалуйста, попробуйте следующий код в средней части.Я предполагаю, что вы скопировали указанный диапазон до этого в буфер обмена.
Внутренняя часть:
' needs a reference to the Microsoft Word x.x Object Library
With olReply
.Display
Dim wdDoc As Word.Document
Set wdDoc = .GetInspector.WordEditor
If Not wdDoc Is Nothing Then
With wdDoc.Range
.Collapse wdCollapseStart
.InsertBefore "Hi," & vbCrLf & vbCrLf & _
"here comes my inserted table:" & vbCrLf
.Collapse wdCollapseEnd
.InsertAfter "Best wishes," & vbCrLf & _
"..." & vbCrLf
.Collapse wdCollapseStart
.Paste
'.PasteAndFormat wdChartPicture
'.PasteAndFormat wdFormatPlainText
End With
End If
Set wdDoc = Nothing
End With
Если вас интересует порядок вставки текста до и после вставленной части: Если вы вставляете простой текстна .PasteAndFormat wdFormatPlainText
курсор не перемещается после текста.Таким образом, порядок am отлично работает для меня в любом варианте вставки.
Если вам нужно отладить позицию курсора, просто добавьте немного .Select
в область With wdDoc.Range
(только для целей отладки).
«Полный» пример для будущих читателей:
Public Sub PasteExcelRangeToEmail()
Dim objOL As Outlook.Application
Dim NewEmail As Outlook.MailItem
Dim wdDoc As Word.Document
Dim wdRange As Word.Range
' get your Outlook object
On Error Resume Next
If objOL Is Nothing Then
Set objOL = GetObject(, "Outlook.Application")
If objOL Is Nothing Then
Set objOL = New Outlook.Application
End If
End If
On Error GoTo 0
Set NewEmail = objOL.CreateItem(olMailItem)
With NewEmail
.To = "info@world"
.Subject = "Concerning ..."
.Display
Set wdDoc = .GetInspector.WordEditor
If Not wdDoc Is Nothing Then
With wdDoc.Range
.Collapse wdCollapseStart
.InsertBefore "Hi there," & vbCrLf & "here's my table:" & vbCrLf
.Collapse wdCollapseEnd
.InsertAfter "Best wishes," & vbCrLf
.Collapse wdCollapseStart
ActiveSheet.Range("A1:C3").Copy
.Paste
'.PasteAndFormat wdChartPicture
'.PasteAndFormat wdFormatPlainText
End With
Set wdDoc = Nothing
End If
'.Send
End With
Set NewEmail = Nothing
Set objOL = Nothing
Application.CutCopyMode = False
End Sub