Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Не вставляет таблицу из Excel в тело письма - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Не вставляет таблицу из Excel в тело письма
akobir Дата: Суббота, 03.02.2018, 14:16 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Привет всем!

Не могу понять, что не так.
Есть кусок кода:
[vba]
Код
    Workbooks(wbname).Sheets(1).Range("A1:Z" & Workbooks(wbname).Sheets(1).Cells(Rows.Count, 1).End(xlUp).row).Copy
    
    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 использовал - результата нет.

Может кто подскажет, в какую сторону рыть?


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеПривет всем!

Не могу понять, что не так.
Есть кусок кода:
[vba]
Код
    Workbooks(wbname).Sheets(1).Range("A1:Z" & Workbooks(wbname).Sheets(1).Cells(Rows.Count, 1).End(xlUp).row).Copy
    
    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 использовал - результата нет.

Может кто подскажет, в какую сторону рыть?

Автор - akobir
Дата добавления - 03.02.2018 в 14:16
akobir Дата: Воскресенье, 04.02.2018, 11:53 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Добрый день!

Не совсем согласен с переносом темы в ветку по Аутлуку, так как код, все же, написан в книге Excel.


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеДобрый день!

Не совсем согласен с переносом темы в ветку по Аутлуку, так как код, все же, написан в книге Excel.

Автор - akobir
Дата добавления - 04.02.2018 в 11:53
sboy Дата: Понедельник, 05.02.2018, 09:21 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день.
Есть в кладовочке вот такая функция. Автор к сожалению не указан, а откуда скачал уже и не вспомню.
[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

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    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 fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    TempWB.Close savechanges:=False

    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function
[/vba]


Яндекс: 410016850021169

Сообщение отредактировал sboy - Понедельник, 05.02.2018, 09:21
 
Ответить
СообщениеДобрый день.
Есть в кладовочке вот такая функция. Автор к сожалению не указан, а откуда скачал уже и не вспомню.
[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

    TempFile = Environ$("temp") & "\" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"

    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 fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
    RangetoHTML = ts.readall
    ts.Close
    RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
                          "align=left x:publishsource=")

    TempWB.Close savechanges:=False

    Kill TempFile

    Set ts = Nothing
    Set fso = Nothing
    Set TempWB = Nothing
End Function
[/vba]

Автор - sboy
Дата добавления - 05.02.2018 в 09:21
akobir Дата: Вторник, 06.02.2018, 11:50 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
sboy, Приветствую!

Такую функцию находил и пробовал уже использовать, но: у меня изначально имеется текст письма, под которым я вставляю таблицу.
А данная функция вставляет только таблицу, что логично, потому что её и копирует. :)

Можно, конечно, в Excel сначала закинуть текст письма, потом таблицу, а потом всё вставить в тело письма, но как-то это некрасиво, что ли...

Странно, что не хочет отправлять комбинацию символов. :(
При этом в дебагере отправляет...


e-mail: akobir.ismailov@gmail.com
 
Ответить
Сообщениеsboy, Приветствую!

Такую функцию находил и пробовал уже использовать, но: у меня изначально имеется текст письма, под которым я вставляю таблицу.
А данная функция вставляет только таблицу, что логично, потому что её и копирует. :)

Можно, конечно, в Excel сначала закинуть текст письма, потом таблицу, а потом всё вставить в тело письма, но как-то это некрасиво, что ли...

Странно, что не хочет отправлять комбинацию символов. :(
При этом в дебагере отправляет...

Автор - akobir
Дата добавления - 06.02.2018 в 11:50
SLAVICK Дата: Вторник, 06.02.2018, 12:33 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
SendKeys крайне нестабилен.
Можно попробовать добавить Wait, чтобы окно успело активироваться.
Еще вариант собрать готовый HTML код полностью и потом вставить его в письмо.
Но я бы сначала вставил таблицу, а потом добавил текст перед ней. Так меньше мороки.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеSendKeys крайне нестабилен.
Можно попробовать добавить Wait, чтобы окно успело активироваться.
Еще вариант собрать готовый HTML код полностью и потом вставить его в письмо.
Но я бы сначала вставил таблицу, а потом добавил текст перед ней. Так меньше мороки.

Автор - SLAVICK
Дата добавления - 06.02.2018 в 12:33
Gustav Дата: Вторник, 06.02.2018, 13:40 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
У меня сработало в таком виде:
[vba]
Код
Option Explicit

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" прочитал здесь.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеУ меня сработало в таком виде:
[vba]
Код
Option Explicit

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
Дата добавления - 06.02.2018 в 13:40
akobir Дата: Вторник, 06.02.2018, 16:10 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Gustav, Вы были крайне правы! Вся проблема оказалась в application.cutcopymode.
Тьфу ты!

Спасибо!

Про букву и раскладку тоже много читал, поэтому заменил на shift+insert. :)


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеGustav, Вы были крайне правы! Вся проблема оказалась в application.cutcopymode.
Тьфу ты!

Спасибо!

Про букву и раскладку тоже много читал, поэтому заменил на shift+insert. :)

Автор - akobir
Дата добавления - 06.02.2018 в 16:10
Gustav Дата: Вторник, 06.02.2018, 16:55 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2797
Репутация: 1161 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Вся проблема оказалась в application.cutcopymode.

Вот видите! А Вы в своем "куске кода" в "сферическом вакууме" даже не показали этот оператор :( Это я к тому, что в следующий раз готовьте, пожалуйста, запускаемый кусок кода, чтобы участники дискуссии не пыхтели поодиночке над его созданием yes


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Вся проблема оказалась в application.cutcopymode.

Вот видите! А Вы в своем "куске кода" в "сферическом вакууме" даже не показали этот оператор :( Это я к тому, что в следующий раз готовьте, пожалуйста, запускаемый кусок кода, чтобы участники дискуссии не пыхтели поодиночке над его созданием yes

Автор - Gustav
Дата добавления - 06.02.2018 в 16:55
akobir Дата: Вторник, 06.02.2018, 17:00 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 201
Репутация: 9 ±
Замечаний: 0% ±

Excel 2010
Gustav, Никогда бы не подумал, что повлияет на ситуацию после вставки, ведь вставляю я раньше... А оказывается, что нет.
Вот и не показывал этот кусок...


e-mail: akobir.ismailov@gmail.com
 
Ответить
СообщениеGustav, Никогда бы не подумал, что повлияет на ситуацию после вставки, ведь вставляю я раньше... А оказывается, что нет.
Вот и не показывал этот кусок...

Автор - akobir
Дата добавления - 06.02.2018 в 17:00
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!