Всем доброго дня! Нужна помощь в написании макроса для создания шаблона письма в Outlook. Что использовать для введения требуемой информации от пользователя (несколько полей ввода, обязательных для заполнения)? В html это required или input. Или может как-то можно внедрить из html в VB этот "input"?
Всем доброго дня! Нужна помощь в написании макроса для создания шаблона письма в Outlook. Что использовать для введения требуемой информации от пользователя (несколько полей ввода, обязательных для заполнения)? В html это required или input. Или может как-то можно внедрить из html в VB этот "input"?Noober89
В свое время на просторах тырнета нашел подобную функцию, которую немного адаптировал под себя. Выглядит так [vba]
Код
Private Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$ = "", _ Optional ByVal AttachFilename As Variant) As Boolean ' функция производит отправку письма с заданной темой и текстом на адрес Email ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию" ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы)
On Error Resume Next: Err.Clear Dim OA As Object: Set OA = CreateObject("Outlook.Application") If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function
With OA.CreateItem(0) 'создаем новое сообщение .To = Email$: .Subject = Subject$: .Body = MailText$ If VarType(AttachFilename) = vbString Then .Attachments.Add AttachFilename If VarType(AttachFilename) = vbObject Then ' AttachFilename as Collection For Each file In AttachFilename: .Attachments.Add file: Next End If For i = 1 To 100000: DoEvents: Next ' без паузы не отправляются письма без вложений Err.Clear: .Send SendEmailUsingOutlook = Err = 0 End With Set OutApp = Nothing End Function
[/vba]
Во славу автора ее написавшего (сорри копирайтов в ней изначально не было)
А вот так я ее вызываю: [vba]
Код
' Отправка электрической почтой
SendMail = Лист3.Cells(61, 17).Value 'Здесь у меня адрес почты с листа берется 'отправляем письмо с 1 вложением attach$ = iUser & MyDoc & "ЗАЯВКА\" & FName & ".xlsx" 'ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook(SendMail, "Hello Word!" & Chr(13) & Chr(13) & "This message created by Microsoft Excel" & Chr(13) & Chr(13)& Chr(13) & Chr(13) & "____________________" & Chr(13) & "Designed by OOO ""Рога и копыта"" (с) MTO-vlg 2013-2015", "#ЗАКАЗ#", attach$) If res Then Debug.Print "Письмо 2 отправлено успешно" Else Debug.Print "Ошибка отправки"
[/vba]
Мне содержимое письма было - не важно, поэтому письмо стряпается в текстовом формате. мне нужна "Тема" и отправка вложенного файла Если у вас Аутглюк-экспресс, то там эта функция не сработает
А все дополнительные поля можно проверить и запросить перед отправкой.
Может быть наведет Вас на мысль.
В свое время на просторах тырнета нашел подобную функцию, которую немного адаптировал под себя. Выглядит так [vba]
Код
Private Function SendEmailUsingOutlook(ByVal Email$, ByVal MailText$, Optional ByVal Subject$ = "", _ Optional ByVal AttachFilename As Variant) As Boolean ' функция производит отправку письма с заданной темой и текстом на адрес Email ' с почтового ящика, настроенного в Outlook для отправки писем "по-умолчанию" ' Если задан параметр AttachFilename, к отправляемому письму прикрепляется файл (файлы)
On Error Resume Next: Err.Clear Dim OA As Object: Set OA = CreateObject("Outlook.Application") If OA Is Nothing Then MsgBox "Не удалось запустить OUTLOOK для отправки почты", vbCritical: Exit Function
With OA.CreateItem(0) 'создаем новое сообщение .To = Email$: .Subject = Subject$: .Body = MailText$ If VarType(AttachFilename) = vbString Then .Attachments.Add AttachFilename If VarType(AttachFilename) = vbObject Then ' AttachFilename as Collection For Each file In AttachFilename: .Attachments.Add file: Next End If For i = 1 To 100000: DoEvents: Next ' без паузы не отправляются письма без вложений Err.Clear: .Send SendEmailUsingOutlook = Err = 0 End With Set OutApp = Nothing End Function
[/vba]
Во славу автора ее написавшего (сорри копирайтов в ней изначально не было)
А вот так я ее вызываю: [vba]
Код
' Отправка электрической почтой
SendMail = Лист3.Cells(61, 17).Value 'Здесь у меня адрес почты с листа берется 'отправляем письмо с 1 вложением attach$ = iUser & MyDoc & "ЗАЯВКА\" & FName & ".xlsx" 'ThisWorkbook.FullName ' прикрепляем текущий файл Excel res = SendEmailUsingOutlook(SendMail, "Hello Word!" & Chr(13) & Chr(13) & "This message created by Microsoft Excel" & Chr(13) & Chr(13)& Chr(13) & Chr(13) & "____________________" & Chr(13) & "Designed by OOO ""Рога и копыта"" (с) MTO-vlg 2013-2015", "#ЗАКАЗ#", attach$) If res Then Debug.Print "Письмо 2 отправлено успешно" Else Debug.Print "Ошибка отправки"
[/vba]
Мне содержимое письма было - не важно, поэтому письмо стряпается в текстовом формате. мне нужна "Тема" и отправка вложенного файла Если у вас Аутглюк-экспресс, то там эта функция не сработает
А все дополнительные поля можно проверить и запросить перед отправкой.
Спасибо за ответ! А можно ли сделать через форму. Т.е. создал форму с TextBox-ами и Button-ом. Как при введении всех данных в поля формы и нажатии на кнопку организовать передачу сформированных данных в окно сообщения уже с заполненным адресатом. Макрос отправки сообщения имеется. [vba]
Код
Sub Macros() Dim fileAttach As Outlook.Attachment
Dim newMail As Outlook.MailItem Set newMail = Application.CreateItem(olMailItem)
UserForm1.Show ' здесь сначала вызываем форму с полями и кнопкой для ввода обязательных данных
' а здесь как-то нужно через кнопку выгрузить эти данные полей с формы
With newMail .Subject = "123123" + Format(Date, "dd.mm.yyyy (dddd)") .To = "mail@ru" .BodyFormat = olFormatHTML .htmlBody = htmlBody .Display End With Set newMail = Nothing End Sub
[/vba] Надеюсь, что я хоть немного доходчиво объяснил
Спасибо за ответ! А можно ли сделать через форму. Т.е. создал форму с TextBox-ами и Button-ом. Как при введении всех данных в поля формы и нажатии на кнопку организовать передачу сформированных данных в окно сообщения уже с заполненным адресатом. Макрос отправки сообщения имеется. [vba]
Код
Sub Macros() Dim fileAttach As Outlook.Attachment
Dim newMail As Outlook.MailItem Set newMail = Application.CreateItem(olMailItem)
UserForm1.Show ' здесь сначала вызываем форму с полями и кнопкой для ввода обязательных данных
' а здесь как-то нужно через кнопку выгрузить эти данные полей с формы
With newMail .Subject = "123123" + Format(Date, "dd.mm.yyyy (dddd)") .To = "mail@ru" .BodyFormat = olFormatHTML .htmlBody = htmlBody .Display End With Set newMail = Nothing End Sub
[/vba] Надеюсь, что я хоть немного доходчиво объяснил Noober89
Сообщение отредактировал Noober89 - Пятница, 30.12.2016, 08:24
ИМХО немного не так. 1. Сначала вызываете форму. 2. Юзер заполняет ее 3. По событию нажатие кнопки "отправить", запускаете свой код по формированию письма и отправке.
ИМХО немного не так. 1. Сначала вызываете форму. 2. Юзер заполняет ее 3. По событию нажатие кнопки "отправить", запускаете свой код по формированию письма и отправке.dim34rus
я немного не это спрашивал) Не знаю, как из TextBox данные в письмо перекинуть, например засунуть в table в письме оутлук, или просто обычным текстом
я немного не это спрашивал) Не знаю, как из TextBox данные в письмо перекинуть, например засунуть в table в письме оутлук, или просто обычным текстомNoober89
Сообщение отредактировал Noober89 - Пятница, 30.12.2016, 09:06
Тогда зачем Excel? Он то тут для каких целей, для интерфейса? Судя по всему вам нужны данные для тела (темы, адресов) так? ну значения то вы вытащите всех текстбоксов запросто [<Parrent>].<TextBoxName>.value . дальше то формировать сообщение надо , текстовое или HTML. и не важно, через Outlook или как отправлять.
Noober89,
Тогда зачем Excel? Он то тут для каких целей, для интерфейса? Судя по всему вам нужны данные для тела (темы, адресов) так? ну значения то вы вытащите всех текстбоксов запросто [<Parrent>].<TextBoxName>.value . дальше то формировать сообщение надо , текстовое или HTML. и не важно, через Outlook или как отправлять.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
MS Outlook 2010. А можно ли на форме создать кнопку, через которую прикреплять файлы к письму? Т.е. это должна быть кнопка идентичная той, что при создании сообщения "Вложить файл". Я так понимаю это должно быть связано с AttachNewFile
MS Outlook 2010. А можно ли на форме создать кнопку, через которую прикреплять файлы к письму? Т.е. это должна быть кнопка идентичная той, что при создании сообщения "Вложить файл". Я так понимаю это должно быть связано с AttachNewFileNoober89
Сообщение отредактировал Noober89 - Пятница, 06.01.2017, 10:51