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

Вход

Регистрация

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

 

= Мир MS Excel/Письмо с подписью по структуре: текст таблица текст подпись - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Outlook » Письмо с подписью по структуре: текст таблица текст подпись (Макросы/Sub)
Письмо с подписью по структуре: текст таблица текст подпись
chendex Дата: Вторник, 21.07.2015, 15:09 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Коллеги, помогите, пожалуйста, разобраться.

Есть готовый макрос (Excel 2007) для отправки письма, со следующей структурой:

1. Текст 1 (приветствие)
2. Вставленный в тело письма фрагмент excel таблицы
3. Текст 2 (к примеру, краткие пояснения к таблице)

А вот четвёртым пунктом - необходимо автоматически подгрузить подпись из Outlook (2007). Причём подгружаться должна та подпись, которая настроена по умолчанию на данном компьютере/OutlookЕ (письмо может быть отправлено не только с моего адреса (компьютера), следовательно подпись должна меняться в зависимости от того, кто пользуется этим макросом)

Помогите, пожалуйста, понять, что нужно добавить в этот код, чтобы заработала подпись:

[vba]
Код
Sub Mail_Selection_Range_Outlook_Body()
       Dim rng As Range
       Dim OutApp As Object
       Dim OutMail As Object
          
       Set rng = Nothing
       On Error Resume Next
       Set rng = Sheets(1).Range("A1:K4").SpecialCells(xlCellTypeVisible)
       On Error GoTo 0

       If rng Is Nothing Then
           MsgBox "The selection is not a range or the sheet is protected. " & _
                  vbNewLine & "Please correct and try again.", vbOKOnly
           Exit Sub
       End If

       With Application
           .EnableEvents = False
           .ScreenUpdating = False
       End With

       Set OutApp = CreateObject("Outlook.Application")
       Set OutMail = OutApp.CreateItem(0)
          
       strbodyb = "ТЕКСТ 1"
                        
       Strbodya = "ТЕКСТ 2"
                    
       On Error Resume Next
       With OutMail
           .To = "test@test.ru"
           .CC = ""
           .BCC = ""
           .Subject = "Название письма"
           .HTMLBody = strbodyb & RangetoHTML(rng) & Strbodya    
           .Display

       End With
       On Error GoTo 0

       With Application
           .EnableEvents = True
           .ScreenUpdating = True
       End With

       Set OutMail = Nothing
       Set OutApp = Nothing
End Sub

Function RangetoHTML(rng As Range)
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
       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"
       
       ' Copy the range and create a workbook to receive the data.
       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
           .DrawingObjects.Visible = True
           .DrawingObjects.Delete
           On Error GoTo 0
       End With
       
       ' Publish the sheet to an .htm file.
       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
       
       ' Read all data from the .htm file into the RangetoHTML subroutine.
       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=")
       
       ' Close TempWB.
       TempWB.Close savechanges:=False
       
       ' Delete the htm file.
       Kill TempFile
       
       Set ts = Nothing
       Set fso = Nothing
       Set TempWB = Nothing
End Function
[/vba]
 
Ответить
СообщениеКоллеги, помогите, пожалуйста, разобраться.

Есть готовый макрос (Excel 2007) для отправки письма, со следующей структурой:

1. Текст 1 (приветствие)
2. Вставленный в тело письма фрагмент excel таблицы
3. Текст 2 (к примеру, краткие пояснения к таблице)

А вот четвёртым пунктом - необходимо автоматически подгрузить подпись из Outlook (2007). Причём подгружаться должна та подпись, которая настроена по умолчанию на данном компьютере/OutlookЕ (письмо может быть отправлено не только с моего адреса (компьютера), следовательно подпись должна меняться в зависимости от того, кто пользуется этим макросом)

Помогите, пожалуйста, понять, что нужно добавить в этот код, чтобы заработала подпись:

[vba]
Код
Sub Mail_Selection_Range_Outlook_Body()
       Dim rng As Range
       Dim OutApp As Object
       Dim OutMail As Object
          
       Set rng = Nothing
       On Error Resume Next
       Set rng = Sheets(1).Range("A1:K4").SpecialCells(xlCellTypeVisible)
       On Error GoTo 0

       If rng Is Nothing Then
           MsgBox "The selection is not a range or the sheet is protected. " & _
                  vbNewLine & "Please correct and try again.", vbOKOnly
           Exit Sub
       End If

       With Application
           .EnableEvents = False
           .ScreenUpdating = False
       End With

       Set OutApp = CreateObject("Outlook.Application")
       Set OutMail = OutApp.CreateItem(0)
          
       strbodyb = "ТЕКСТ 1"
                        
       Strbodya = "ТЕКСТ 2"
                    
       On Error Resume Next
       With OutMail
           .To = "test@test.ru"
           .CC = ""
           .BCC = ""
           .Subject = "Название письма"
           .HTMLBody = strbodyb & RangetoHTML(rng) & Strbodya    
           .Display

       End With
       On Error GoTo 0

       With Application
           .EnableEvents = True
           .ScreenUpdating = True
       End With

       Set OutMail = Nothing
       Set OutApp = Nothing
End Sub

Function RangetoHTML(rng As Range)
' Works in Excel 2000, Excel 2002, Excel 2003, Excel 2007, Excel 2010, Outlook 2000, Outlook 2002, Outlook 2003, Outlook 2007, and Outlook 2010.
       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"
       
       ' Copy the range and create a workbook to receive the data.
       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
           .DrawingObjects.Visible = True
           .DrawingObjects.Delete
           On Error GoTo 0
       End With
       
       ' Publish the sheet to an .htm file.
       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
       
       ' Read all data from the .htm file into the RangetoHTML subroutine.
       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=")
       
       ' Close TempWB.
       TempWB.Close savechanges:=False
       
       ' Delete the htm file.
       Kill TempFile
       
       Set ts = Nothing
       Set fso = Nothing
       Set TempWB = Nothing
End Function
[/vba]

Автор - chendex
Дата добавления - 21.07.2015 в 15:09
anvg Дата: Среда, 22.07.2015, 05:41 | Сообщение № 2
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Попробуйте так.
[vba]
Код
Public Function GetSheetHtml(ByVal this As Worksheet) As String
     Dim pItem As Outlook.MailItem
     this.MailEnvelope.Introduction = "Текст приветствия письма"
     Set pItem = this.MailEnvelope.Item
     GetSheetHtml = pItem.HTMLBody
     Set pItem = Nothing
End Function

Public Sub testSend()
     Dim outApp As New Outlook.Application
     Dim pMail As Outlook.MailItem, sHtml As String
      
     Set pMail = outApp.CreateItem(olMailItem)
     'По совету http://answers.microsoft.com/en-us/office/forum/office_2007-customize/vba-adding-default-email-signature-to-an-outlook/dbd0dd80-bafd-48cc-beb1-c60306c36d98?auth=1
     'если отображать сообщение сразу после создания, то автоматически
     'вставляется подпись по-умолчанию. Потом продолжаем всё остальное
     pMail.Display
     pMail.HTMLBody = GetSheetHtml(ThisWorkbook.ActiveSheet) & pMail.HTMLBody
     pMail.Subject = "Текст темы письма"
     pMail.To = "noname@none.not"
End Sub
[/vba]
P. S. В примере использовано, в отличии от вашего кода, раннее связывание
 
Ответить
СообщениеДоброе время суток
Попробуйте так.
[vba]
Код
Public Function GetSheetHtml(ByVal this As Worksheet) As String
     Dim pItem As Outlook.MailItem
     this.MailEnvelope.Introduction = "Текст приветствия письма"
     Set pItem = this.MailEnvelope.Item
     GetSheetHtml = pItem.HTMLBody
     Set pItem = Nothing
End Function

Public Sub testSend()
     Dim outApp As New Outlook.Application
     Dim pMail As Outlook.MailItem, sHtml As String
      
     Set pMail = outApp.CreateItem(olMailItem)
     'По совету http://answers.microsoft.com/en-us/office/forum/office_2007-customize/vba-adding-default-email-signature-to-an-outlook/dbd0dd80-bafd-48cc-beb1-c60306c36d98?auth=1
     'если отображать сообщение сразу после создания, то автоматически
     'вставляется подпись по-умолчанию. Потом продолжаем всё остальное
     pMail.Display
     pMail.HTMLBody = GetSheetHtml(ThisWorkbook.ActiveSheet) & pMail.HTMLBody
     pMail.Subject = "Текст темы письма"
     pMail.To = "noname@none.not"
End Sub
[/vba]
P. S. В примере использовано, в отличии от вашего кода, раннее связывание

Автор - anvg
Дата добавления - 22.07.2015 в 05:41
chendex Дата: Понедельник, 27.07.2015, 10:31 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 0 ±
Замечаний: 20% ±

Excel 2007
Попробуйте так.


Спасибо, буду пробовать.
 
Ответить
Сообщение
Попробуйте так.


Спасибо, буду пробовать.

Автор - chendex
Дата добавления - 27.07.2015 в 10:31
Мир MS Excel » Вопросы и решения » Excel и другие приложения » Outlook » Письмо с подписью по структуре: текст таблица текст подпись (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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