Всем привет! Друзья я может совсем не по адресу, ну в правилах не нашел, что нельзя задавать вопросы по аутлуку а именно vba. Так что уповаю на Вашу помощь. Кто сможет мне подсказать как сделать так, что бы в открывшемся окне нового сообщения, я мог вставить подпись не стандартным методом, а макросом. То есть тыкнуть макрос и он добавит в письмо заданную подпись. Более точно будет сказать, мне нужно что бы аутлук в письмо вставил подпись точно так же как и через стандартную функцию "Подпись", но только кнопкой макроса. Вопрос вроде бы не тяжелый для знающих)
Всем заранее спасибо за ответы! Модераторы если нарушил правила, пожалуйста, извините, и прошу Вас сделать исключение. Спасибо!
Использовал поиск, но там нашел решения которые намного труднее моего, (то есть вытащить инфу из таблицы экселя создать сообщение отправить определенному человеку), а информации как вставить подпись в письмо не стандартной функцией а именно макросом нету(
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 закомментировано Сам текст подписи редактируйте в коде или указывайте на ячейки(если текст в них).
Опять же - этот пример создает текст подписи. Человеку же надо не создать, а взять одну из стандартных. В чем беда здесь: чтобы вставлять какую-то подпись надо знать её имя. По-другому никак. Что-то вроде:
Код
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, да, можно решить вашим методом, но, я не могу понять логику автора темы: зачем извращаться макросом, если стандартная функция оутлука делает тоже самое(берет подпись из папки signatures) Автору помощь быстрее придет, если понимать причину такого подхода. Но, как говорится, хозяин - барин.
В приложенном файле, пример того что я хочу. Просто подписей очень много но пользуюсь зачастую только несколькими, и во избежание нажатия не туда хочу вынести клавишу отдельно рядом, это и дополнительное удобство. На рисунке есть подпись "1. Клиенту" которую я хочу вынести отдельно на клавишу рядом. То есть создаю сообщение руками все делаю руками, нужно единственное что бы подпись не выбирать из общего списка, а то же самое сделать только отдельной клавишей. Это возможно?
Jungl написал: The_Prist , да, можно решить вашим методом, но, я не могу понять логику автора темы: зачем извращаться макросом, если стандартная функция оутлука делает тоже самое(берет подпись из папки signatures) Автору помощь быстрее придет, если понимать причину такого подхода. Но, как говорится, хозяин - барин.
Написал сообщение выше и приложил пример) буду очень признателен за помощь.
А какого рода помощь? По факту Вы просите создать для Вас надстройку или код с нуля в Outlook. Если честно, то мне лично из спортивного интереса это неинтересно. Хоть код представляется довольно простым и незатейливым - на него нужно время. У меня пока нет желания тратить время на ту задачу, на которую Вы не хотите тратить свое время. Поэтому в любом случае Вам придется ждать пока у меня либо кого-то еще появится желание потратить полчаса-час на эту задачу. Без обид, написал как есть.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Выше по ссылке вроде бы рабочий вариант приложен без всяких вот этих вот Кусочек, отвечающий за получение подписи:
Код
'обязательно отображаем письмо ДО отправки и добавления своего текста
'без этого может не подгрузиться подпись
.Display
'добавляем к пустому письму с уже прогруженной подписью свой текст(sBody)
.HTMLBody = sBody & .HTMLBody
В Вашем случае вместо sBody надо просто поставить YourHTMLBody.