With objMail .To = sTo .Subject = sSubject .HTMLbody = "<font Face=Calibri Size 12>" & sBody & "<br /><br />" .display Application.SendKeys "^{End}", True Application.SendKeys "+{Insert}", True End With
[/vba]
При этом, ctrl+End срабатывает, а вставлять таблицу совсем не хочет. Причем, если выполнять код в режиме отладчика - то все шикарно. Если запускать целиком - то таблицы нет. Application.wait использовал - результата нет.
Может кто подскажет, в какую сторону рыть?
Привет всем!
Не могу понять, что не так. Есть кусок кода: [vba]
With objMail .To = sTo .Subject = sSubject .HTMLbody = "<font Face=Calibri Size 12>" & sBody & "<br /><br />" .display Application.SendKeys "^{End}", True Application.SendKeys "+{Insert}", True End With
[/vba]
При этом, ctrl+End срабатывает, а вставлять таблицу совсем не хочет. Причем, если выполнять код в режиме отладчика - то все шикарно. Если запускать целиком - то таблицы нет. Application.wait использовал - результата нет.
Добрый день. Есть в кладовочке вот такая функция. Автор к сожалению не указан, а откуда скачал уже и не вспомню. [vba]
Код
''''''' ' в основной процедуре передаем нужный range в функцию .HTMLBody = RangetoHTML(rng) ''''''' Function RangetoHTML(rng As Range) Dim fso As Object Dim ts As Object Dim TempFile As String Dim TempWB As Workbook
rng.Copy Set TempWB = Workbooks.Add(1) With TempWB.Sheets(1) .Cells(1).PasteSpecial Paste:=8 .Cells(1).PasteSpecial xlPasteValues, , False, False .Cells(1).PasteSpecial xlPasteFormats, , False, False .Cells(1).Select Application.CutCopyMode = False On Error Resume Next On Error GoTo 0 End With
With TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(1).Name, _ Source:=TempWB.Sheets(1).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (True) End With
Set ts = Nothing Set fso = Nothing Set TempWB = Nothing End Function
[/vba]
Добрый день. Есть в кладовочке вот такая функция. Автор к сожалению не указан, а откуда скачал уже и не вспомню. [vba]
Код
''''''' ' в основной процедуре передаем нужный range в функцию .HTMLBody = RangetoHTML(rng) ''''''' Function RangetoHTML(rng As Range) Dim fso As Object Dim ts As Object Dim TempFile As String Dim TempWB As Workbook
rng.Copy Set TempWB = Workbooks.Add(1) With TempWB.Sheets(1) .Cells(1).PasteSpecial Paste:=8 .Cells(1).PasteSpecial xlPasteValues, , False, False .Cells(1).PasteSpecial xlPasteFormats, , False, False .Cells(1).Select Application.CutCopyMode = False On Error Resume Next On Error GoTo 0 End With
With TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(1).Name, _ Source:=TempWB.Sheets(1).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (True) End With
Такую функцию находил и пробовал уже использовать, но: у меня изначально имеется текст письма, под которым я вставляю таблицу. А данная функция вставляет только таблицу, что логично, потому что её и копирует.
Можно, конечно, в Excel сначала закинуть текст письма, потом таблицу, а потом всё вставить в тело письма, но как-то это некрасиво, что ли...
Странно, что не хочет отправлять комбинацию символов. При этом в дебагере отправляет...
sboy, Приветствую!
Такую функцию находил и пробовал уже использовать, но: у меня изначально имеется текст письма, под которым я вставляю таблицу. А данная функция вставляет только таблицу, что логично, потому что её и копирует.
Можно, конечно, в Excel сначала закинуть текст письма, потом таблицу, а потом всё вставить в тело письма, но как-то это некрасиво, что ли...
Странно, что не хочет отправлять комбинацию символов. При этом в дебагере отправляет...akobir
SendKeys крайне нестабилен. Можно попробовать добавить Wait, чтобы окно успело активироваться. Еще вариант собрать готовый HTML код полностью и потом вставить его в письмо. Но я бы сначала вставил таблицу, а потом добавил текст перед ней. Так меньше мороки.
SendKeys крайне нестабилен. Можно попробовать добавить Wait, чтобы окно успело активироваться. Еще вариант собрать готовый HTML код полностью и потом вставить его в письмо. Но я бы сначала вставил таблицу, а потом добавил текст перед ней. Так меньше мороки.SLAVICK
Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias _ "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Sub io()
Dim olApp As Object Dim olMail As Object
ThisWorkbook.Worksheets(1).Range("A1:C3").Copy
Set olApp = CreateObject("Outlook.Application") Set olMail = olApp.CreateItem(0)
With olMail .To = "значение То" .Subject = "значение Subject" .HTMLbody = "<font Face=Calibri Size 12>" & "значение HTMLbody" & "<br /><br />" .Display End With
'перед SendKeys обязательно переключиться на латинскую клаву - либо вручную, либо следующим вызовом: Call LoadKeyboardLayout("00000409", &H1) 'это уже получится в окне открывшегося письма Outlook
SendKeys "^{END}^{v}" 'именно маленькая v в фигурных скобках!! (хотя и без скобок работает, но маленькая!)
Set olMail = Nothing Set olApp = Nothing
'Application.CutCopyMode = False ' этого здесь категорически НЕ НАДО - сотрёт буфер до вставки!!
Declare PtrSafe Function LoadKeyboardLayout Lib "user32" Alias _ "LoadKeyboardLayoutA" (ByVal pwszKLID As String, ByVal flags As Long) As Long
Sub io()
Dim olApp As Object Dim olMail As Object
ThisWorkbook.Worksheets(1).Range("A1:C3").Copy
Set olApp = CreateObject("Outlook.Application") Set olMail = olApp.CreateItem(0)
With olMail .To = "значение То" .Subject = "значение Subject" .HTMLbody = "<font Face=Calibri Size 12>" & "значение HTMLbody" & "<br /><br />" .Display End With
'перед SendKeys обязательно переключиться на латинскую клаву - либо вручную, либо следующим вызовом: Call LoadKeyboardLayout("00000409", &H1) 'это уже получится в окне открывшегося письма Outlook
SendKeys "^{END}^{v}" 'именно маленькая v в фигурных скобках!! (хотя и без скобок работает, но маленькая!)
Set olMail = Nothing Set olApp = Nothing
'Application.CutCopyMode = False ' этого здесь категорически НЕ НАДО - сотрёт буфер до вставки!!
End Sub
[/vba] Про маленькую букву "v" прочитал здесь.Gustav
Вот видите! А Вы в своем "куске кода" в "сферическом вакууме" даже не показали этот оператор Это я к тому, что в следующий раз готовьте, пожалуйста, запускаемый кусок кода, чтобы участники дискуссии не пыхтели поодиночке над его созданием
Вот видите! А Вы в своем "куске кода" в "сферическом вакууме" даже не показали этот оператор Это я к тому, что в следующий раз готовьте, пожалуйста, запускаемый кусок кода, чтобы участники дискуссии не пыхтели поодиночке над его созданием Gustav
Gustav, Никогда бы не подумал, что повлияет на ситуацию после вставки, ведь вставляю я раньше... А оказывается, что нет. Вот и не показывал этот кусок...
Gustav, Никогда бы не подумал, что повлияет на ситуацию после вставки, ведь вставляю я раньше... А оказывается, что нет. Вот и не показывал этот кусок...akobir