Привет!
Столкнулся с проблемой, которую самостоятельно "победить" не смог

.
Вводная:
Excel'ный документ с набором макросов и данных.
Что хотелось получить:
Необходимо сформировать тело письма, в которое надо вставить определенный Range таблицы (10x10 ячеек) и добавить текст ниже таблицы (не связано с таблицей).
Как я пытался сделать:
Private Sub CommandButton1_Click()
Dim mailApp As Outlook.Application
Dim dfg As Object
Dim BodyText As String
' ищу Outlook - запущен/не запущен
lngRetVal = FindWindowByClass("rctrl_renwnd32", 0&)
If lngRetVal <> 0 Then
Set mailApp = GetObject(, "Outlook.Application")
Else
Set mailApp = CreateObject("Outlook.Application")
End If
Set objMail = mailApp.CreateItem(olMailItem)
Set dfg = objMail.Recipients.Add("test@test.ru")
dfg.Type = olTo
With objMail
.Importance = olImportanceHigh
.Subject = "Your Subject"
.BodyFormat = olFormatHTML 'указал формат HTML
.Body = Worksheets("DATA").Range("A1").Text
End With
objMail.Send
Set objMail = Nothing
Set mailApp = Nothing
End Sub
С выделенной строкой пытаюсь "шаманить", но ничего не получается.
Думал, что можно на халяву указать примерно так,
.Body = Worksheets("DATA").Range("A1:Z48").Text, а потом в довесок еще докинуть текстовых данных. Но низяяяяя....
Формировать строку в виде последовательности тегов html'ных этого Range, я не осилю
Помогите, pls.
Укажите в каком направлении копать или примером.
Спасибо!
Обходное, но выполняющее необходимые действия:
Процедура отправки таблицы в теле письма:
Private Sub CommandButton1_Click()
Dim mailApp As Outlook.Application
Dim dfg As Object
'поиск окна Microsoft Outlook
lngRetVal = FindWindowByClass("rctrl_renwnd32", 0&)
If lngRetVal <> 0 Then
Set mailApp = GetObject(, "Outlook.Application")
Else
Set mailApp = CreateObject("Outlook.Application")
End If
Set objMail = mailApp.CreateItem(olMailItem)
Set dfg = objMail.Recipients.Add("test@test.com")
dfg.Type = olTo
With objMail
.Importance = olImportanceHigh
.Subject = "Your Subject"
.BodyFormat = olFormatHTML 'формат HTML
.HTMLBody = SheetToHTML(ThisWorkbook.Worksheets("tasks"))
End With
'Предварительный просмотр письма
'objMail.Display
'Отправка письма
objMail.Send
Set objMail = Nothing
Set mailApp = Nothing
End Sub
"Функция-хак" псевдопреобразования таблицы в набор html'ных тегов для BODY письма.
Public Function SheetToHTML(sh As Worksheet)
Dim TempFile As String
Dim fso As Object
Dim ts As Object
sh.Copy
TempFile = sh.Parent.Path & "\TempHtml.htm"
With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
TempFile, "tasks", "A1:Z48", xlHtmlStatic, "333_8568" _
, "")
.Publish (True)
.AutoRepublish = False
End With
ActiveWorkbook.Close False
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
SheetToHTML = ts.ReadAll
ts.Close
Set ts = Nothing
Set fso = Nothing
Kill TempFile
End Function
Декларация функции поиска запущенных процессов
Declare Function FindWindowByClass Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As Long) As Long
Надеюсь, кому-нибудь это тоже пригодиться.