Страницы: 1
RSS
Вставка подписи в сообщение Outlook макросом
 
Всем привет!
Друзья я может совсем не по адресу, ну в правилах не нашел, что нельзя задавать вопросы по аутлуку а именно vba.
Так что уповаю на Вашу помощь.
Кто сможет мне подсказать как сделать так, что бы в открывшемся окне нового сообщения, я мог вставить подпись не стандартным методом, а макросом.
То есть тыкнуть макрос и он добавит в письмо заданную подпись.
Более точно будет сказать, мне нужно что бы аутлук в письмо вставил подпись точно так же как и через стандартную функцию "Подпись", но только кнопкой макроса.
Вопрос вроде бы не тяжелый для знающих)

Всем заранее спасибо за ответы!
Модераторы если нарушил правила, пожалуйста, извините, и прошу Вас сделать исключение. Спасибо!
Изменено: Gum_bad - 26.05.2016 22:40:11
 
Если планируется макрос из Excel, то никакого нарушения нет )
Посмотрите эту тему или здесь
P.S. А почему Вы сами стесняетесь использовать поиск?
 
Использовал поиск, но там нашел решения которые намного труднее моего, (то есть вытащить инфу из таблицы экселя создать сообщение отправить определенному человеку), а информации как вставить подпись в письмо не стандартной функцией а именно макросом нету(
Изменено: Gum_bad - 26.05.2016 22:48:36
 
Ну как нету.
Вот пример.
Отсюда.
Код
Sub Mail_Outlook_With_Signature_Html_1()
' Working in Office 2000-2016
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    strbody = "<H3><B>Dear Customer Ron de Bruin</B></H3>" & _
              "Please visit this website to download the new version.<br>" & _
              "Let me know if you have problems.<br>" & _
              "<A HREF=""http://www.rondebruin.nl/tips.htm"">Ron's Excel Page</A>" & _
              "<br><br><B>Thank you</B>"

    On Error Resume Next

    With OutMail
        .Display
        .To = "ron@debruin.nl"
        .CC = ""
        .BCC = ""
        .Subject = "This is the Subject line"
        .HTMLBody = strbody & "<br>" & .HTMLBody
        '.Send
    End With

    On Error GoTo 0
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub

.Send закомментировано
Сам текст подписи редактируйте в коде или указывайте на ячейки(если текст в них).
 
Цитата
Jungl написал:
Вот пример
Опять же - этот пример создает текст подписи. Человеку же надо не создать, а взять одну из стандартных.
В чем беда здесь: чтобы вставлять какую-то подпись надо знать её имя. По-другому никак. Что-то вроде:
Код
Sub Send_Mail()
 Dim oMail As Outlook.MailItem, OutlookApp As Outlook.Application
 Dim li As Long, sSignature As String
 Workbooks.OpenText "C:\Documents and Settings\USERPROFILE\Application Data\Microsoft\Signatures\Служебная.txt"
 For li = ActiveSheet.UsedRange.Row To ActiveSheet.UsedRange.Rows.Count
 sSignature = sSignature & vbCrLf & Cells(li, ActiveSheet.UsedRange.Column)
 Next li
 Set OutlookApp = Outlook.Application
 Set oMail = OutlookApp.CreateItem(0)
 With oMail
 .To = "aaa@bbb.ru"
 .Subject = "Тема"
 .Body = "Текст письма" & String(4, vbCrLf) & sSignature
 .Attachments.Add 'здесь указывается полный путь к файлу для отправки
 .Send 'Либо Display, если необходимо просто отобразить созданное письмо, но пока не отправлять - отправка возлагается на человека.

 End With
 Set oMail = Nothing
 Set OutlookApp = Nothing
End Sub
где USERPROFILE - это папка с именем пользователя. По-хорошему, надо писать определение папки подписей так:
environ("appdata") & "\Microsoft\Signatures\Служебная.txt"
тогда будет более универсально. Так же можно пройтись по папке Signatures и просмотреть там все файлы. Если подпись только одна - проблем быть не должно. А если несколько - лучше запрашивать какую из них вставить.

Плюс код был написан давно и под другие нужды. Поэтому скорее всего лучше будет открывать через FSO. При этом для неформатированной подписи - файл txt, а для форматированной - Служебная.htm. И уже считанный с файла текст вставлять в .Body или .HTMLBody в зависимости от нужд.
Изменено: The_Prist - 27.05.2016 12:07:34
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, да, можно решить вашим методом, но, я не могу понять логику автора темы: зачем извращаться макросом, если стандартная функция оутлука делает тоже самое(берет подпись из папки signatures) :)
Автору помощь быстрее придет, если понимать причину такого подхода. Но, как говорится, хозяин - барин.
 
В приложенном файле, пример того что я хочу.
Просто подписей очень много но пользуюсь зачастую только несколькими, и во избежание нажатия не туда хочу вынести клавишу отдельно рядом, это и дополнительное удобство.
На рисунке есть подпись "1. Клиенту" которую я хочу вынести отдельно на клавишу рядом.
То есть создаю сообщение руками все делаю руками, нужно единственное что бы подпись не выбирать из общего списка, а то же самое сделать только отдельной клавишей.
Это возможно?

Спасибо!
 
Цитата
Jungl написал:
The_Prist , да, можно решить вашим методом, но, я не могу понять логику автора темы: зачем извращаться макросом, если стандартная функция оутлука делает тоже самое(берет подпись из папки signatures)
Автору помощь быстрее придет, если понимать причину такого подхода. Но, как говорится, хозяин - барин.
Написал сообщение выше и приложил пример) буду очень признателен за помощь.

Спасибо!
 
Цитата
Gum_bad написал:
признателен за помощь
А какого рода помощь? По факту Вы просите создать для Вас надстройку или код с нуля в Outlook. Если честно, то мне лично из спортивного интереса это неинтересно. Хоть код представляется довольно простым и незатейливым - на него нужно время. У меня пока нет желания тратить время на ту задачу, на которую Вы не хотите тратить свое время.
Поэтому в любом случае Вам придется ждать пока у меня либо кого-то еще появится желание потратить полчаса-час на эту задачу. Без обид, написал как есть.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Готовый пример выбора подписи из имеющихся в outlook'e:
http://www.excel-vba.ru/chto-umeet-excel/vstavit-v-pismo-podpis-iz-outlook-cherez-vba/
Макрос создан для excel, переделать для outlook'a не должно быть проблемой.
 
Подскажите пожалуйста,
Что не так в этом коде? Почему к письму не прикрепляется шаблонная подпись из outlook'e?

Код
Sub Проверка()
Dim adressTo$, fname$, theme$, Disclaimer$
Dim OutApp As Object
Dim OutMail As Object
Dim sh As Worksheet
Dim rng As Range

Set sh = ThisWorkbook.Sheets("Расчет")

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

With sh
    .AutoFilterMode = False
    .Range("$A$3:$B$3").AutoFilter Field:=2, Criteria1:="<>" ' диапазон таблицы
End With

Set rng = sh.Range("A3").CurrentRegion

With sh
    adressTo = .Range("O3").Value ' получатель сообщения
    adressCC = .Range("O4").Value ' получатели копии сообщения
    theme = "согласование" & .Range("A4").Value & " " & .Range("T4").Value & " " & .Range("T5").Value & " " & .Range("T6").Value & " " & .Range("T7").Value & " " & .Range("T8").Value & " " & .Range("T9").Value & " " & .Range("T10").Value & " " & .Range("T11").Value & " " & .Range("T12").Value & " " & .Range("T13").Value & " " & .Range("T14").Value & " " & .Range("T15").Value & " " & .Range("T16").Value & " " & .Range("T17").Value & " " & .Range("T18").Value & " " & .Range("T19").Value & " " & .Range("T20").Value & " " & .Range("T21").Value & " " & .Range("T22").Value & " " & .Range("T23").Value & " " & .Range("T24").Value ' тема сообщения
    Disclaimer = .Range("P3").Value ' текст сообщения
End With

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next

With OutMail
    .To = adressTo ' получатель сообщения
    .CC = adressCC ' получатели копии сообщения
    .BCC = ""
    .Subject = theme ' тема сообщения
    .HTMLBody = "<p style=font-size:11pt;font-family:Calibri;>" & Disclaimer & _
    RangetoHTML(rng) & vbCrLf & "<p style=font-size:11pt;font-family:Calibri;></a>"
    .Display

End With

Set OutMail = Nothing
Set OutApp = Nothing
sh.AutoFilterMode = False
ThisWorkbook.Save


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

End Sub

 
Попробуйте так:
Код
Dim YourHTMLBody As String
...
With OutMail    .To = adressTo ' получатель сообщения
    .CC = adressCC ' получатели копии сообщения
    .BCC = ""
    .Subject = theme ' тема сообщения

    .BodyFormat = 2 ' =olFormatHTML    
    .Display ' вставит подпись

    YourHTMLBody = "<p style=font-size:11pt;font-family:Calibri;>" & Disclaimer & _
    RangetoHTML(rng) & vbCrLf & "<p style=font-size:11pt;font-family:Calibri;></a>"

     .HTMLBody = Replace(.HTMLBody, "<a name=""_MailAutoSig"">", YourHTMLBody & "<a name=""_MailAutoSig"">")

End With
...
 
В сообщении от верха появляются 3 пустые строки. Как их убрать?
 
Цитата
написал:
3 пустые строки. Как их убрать
Я в HTML не силён, как и в Outlook. Но у меня работает такой вариант:
Код
Dim YourHTMLBody As String, iStart As Long, iEnd As Long
...
With OutMail
    .To = adressTo ' получатель сообщения
    .CC = adressCC ' получатели копии сообщения
    .BCC = ""
    .Subject = theme ' тема сообщения

    .BodyFormat = 2 ' =olFormatHTML    
    .Display ' вставит подпись

    YourHTMLBody = "<p style=font-size:11pt;font-family:Calibri;>" & Disclaimer & _
    RangetoHTML(rng) & vbCrLf & "<p style=font-size:11pt;font-family:Calibri;></a>"

    iStart = InStr(1, .HTMLBody, "<div class=WordSection1>", vbTextCompare)
    iEnd = InStr(1, .HTMLBody, "<p class=MsoNormal><a name=""_MailAutoSig"">", vbTextCompare)

    If iStart>0 And iEnd>0 Then
        .HTMLBody = Left(.HTMLBody, iStart-1) & YourHTMLBody & Mid(.HTMLBody, iEnd)
    End if

End With 
...
 
В таком варианте подпись в плотную сливается с текстом сообщения. Как тут сделать нужный отступ?
 
Выше по ссылке вроде бы рабочий вариант приложен без всяких вот этих вот :) Кусочек, отвечающий за получение подписи:
Код
'обязательно отображаем письмо ДО отправки и добавления своего текста
'без этого может не подгрузиться подпись
.Display
'добавляем к пустому письму с уже прогруженной подписью свой текст(sBody)
.HTMLBody = sBody & .HTMLBody

В Вашем случае вместо sBody надо просто поставить YourHTMLBody.
Цитата
anddrei55 написал:
Как тут сделать нужный отступ?
ну это ж гуглится не так-то и сложно - "перенос строк в HTML" :)
Код
<br />
Изменено: Дмитрий(The_Prist) Щербаков - 10.04.2024 12:30:40
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Попробуйте в конце YourHTMLBody дописать 1 или несколько "<br>".
 
Спасибо! Все получилось
Страницы: 1
Наверх