Отправка книги или листа по электронной почте

Если вам часто приходится рассылать определенные книги или листы по электронной почте, то вы должны были заметить, что процедуру эту быстрой не назовешь. Если делать ее "классически", то надо:

  • открыть почтовую программу (например Outlook)
  • создать новое сообщение
  • вбить туда адрес, тему и текст
  • прикрепить к сообщению файл (не забыть!)
  • нажать кнопку Отправить

На самом деле почту можно легко отправлять прямо из Excel кучей разных способов. Поехали...

Способ 1. Встроенная отправка

Если у вас еще старый добрый Excel 2003, то все просто. Открываете нужную книгу/лист и выбираете в меню Файл - Отправить - Сообщение (File - Send To - Mail Recipient). Откроется окошко, в котором можно выбрать один из двух вариантов отправки:

sendmail1.gif

В первом случае текущая книга будет добавлена в сообщение как вложение, во втором - содержимое текущего листа попадет прямо в текст сообщения как текстовая таблица (без формул).

Кроме этого в меню Файл - Отправить (File - Send To) есть еще несколько более экзотических вариантов отправки:

 sendmail2.gif

  • Сообщение (для ознакомления) (Mail Recipient for Review) - отправляется вся книга целиком и при этом для нее включается отслеживание изменений, т.е. начинает явно фиксироваться - кто, когда и в каких ячейках какие изменения производил. Отобразить внесенные изменения потом можно в меню Сервис - Исправления - Выделить исправления (Tools - Track changes - Highlight changes) или на вкладке Рецензирование - Исправления (Reveiw - Track Changes) Выглядеть это будет примерно так:
    sendmail3.gif

    Цветные рамочки помечают изменения, внесенные в документ (для каждого пользователя - свой цвет). При наведении мыши всплывает похожее на примечание окошко с подробным описанием кто, что и когда изменил в этой ячейке. Весьма удобно для рецензирования документов, когда, например, вы правите отчет своих подчиненных или шеф правит ваш.
  • По маршруту (Routing Recipient) - сообщение, куда будет вложена ваша книга, отправится по цепочке получателей, каждый из которых автоматически будет пересылать его дальше, как эстафетную палочку. При желании можно задать, чтобы в конце цепочки сообщение вернулось к вам обратно. Можно включить режим отслеживания изменений, чтобы видеть правки, внесенный каждым человеком в цепочке.

В новых Excel 2007/2010 ситуация немного другая. В этих версиях для отправки книги по почте нужно выбрать кнопку Офис (Office Button) или вкладку Файл (File) и команду Отправить (Send). Далее, пользователю предлагается набор вариантов отправки:

sendmail5.gif

Обратите внимание на то, что в новых версиях исчезла возможность отправки отдельного листа книги, вставленного в тело письма - как это было в Excel 2003 и старше. Осталась только возможность отправить весь файл целиком. Зато появилась полезная возможность отправлять в известном формате PDF и менее известном XPS (аналог PDF, но не требует Acrobat Reader для чтения - открывается прямо в Internet Explorer). Команду отправки книги для ознакомления можно вытащить как дополнительную кнопку на панель быстрого доступа через Файл - Параметры - Панель быстрого доступа - Все команды - Отправить на проверку (File - Options - Quick Access Toolbar - All Comands - Send for Review).

Способ 2. Простые макросы для отправки

Отправка макросом гораздо проще. Открываем редактор Visual Basic через меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor), вставляем новый модуль в меню Insert - Module и копируем туда текст этих двух макросов:

Sub SendWorkbook()
    ActiveWorkbook.SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик"
End Sub

Sub SendSheet()
    ThisWorkbook.Sheets("Лист1").Copy
    With ActiveWorkbook
        .SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик"
        .Close SaveChanges:=False
    End With
End Sub

После этого скопированные макросы можно запустить в меню Сервис - Макрос - Макросы (Tools - Macro - Macros). SendWorkbook отправляет на заданный адрес всю текущую книгу, а SendSheet - Лист1 как вложение.

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

sendmail4.gif

Дождитесь, пока кнопка Разрешить станет активной и нажмите ее, чтобы подтвердить свою отправку. После этого созданные автоматически сообщения будут помещены в папку Исходящие и отправятся получателям при первом запуске Outlook или, если он у вас запущен, непосредственно сразу же.

Способ 3. Универсальный макрос

А если хочется отправлять не текущую книгу, а любой другой файл? И текст сообщения тоже неплохо было бы задать! Предыдущие макросы здесь не помогут, поскольку ограничены возможностями самого Excel, но можно создать макрос, который будет из Excel'я управлять Outlook'ом - создавать и заполнять окно нового сообщения и отправлять его. Макрос выглядит так:

Sub SendMail()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim cell As Range
    
    Application.ScreenUpdating = False
    Set OutApp = CreateObject("Outlook.Application")   'запускаем Outlook в скрытом режиме
    OutApp.Session.Logon      
    On Error GoTo cleanup  'если не запустился - выходим 
    Set OutMail = OutApp.CreateItem(0)   'создаем новое сообщение
    On Error Resume Next
    'заполняем поля сообщения
    With OutMail
        .To = Range("A1").Value
        .Subject = Range("A2").Value
        .Body = Range("A3").Value
        .Attachments.Add Range("A4").Value
        'команду Send можно заменить на Display, чтобы посмотреть сообщение перед отправкой 
        .Send
    End With

    On Error GoTo 0
    Set OutMail = Nothing

cleanup:
    Set OutApp = Nothing
    Application.ScreenUpdating = True
End Sub

Адрес, тема, текст сообщения и путь к вложенному файлу должны быть в ячейках A1:A4 текущего листа.

Ссылки по теме

 


Страницы: 1  2  
Ирина
07.10.2012 11:27:45
Это великолепно! Вот только есть проблема, из-за некорректной работы Outlook, приходится работать с The Batt! Иногда нужно отправлять не полностью книгу, а лист или определенные данные, причем срочно. Помогите в этом случае. 2 программы я считаю ставить нерационально..
Евгений
07.10.2012 11:28:48
Всем привет!
Вот сегодня наконец-то сделал то, что хотел - отправку почту с макроса через The Bat! Хочу заметить, что работает только с The Bat! начиная с версии 4.2.9.1.
Вот исходный текст:
 mailbox_1 = CStr(Workbooks("Файл.xls").Sheets("Настройка").Range("B21"))
 mailbox_2 = CStr(Workbooks("Файл.xls").Sheets("Настройка").Range("B22"))
 tema = "Отчет_на_" & Box_Data.Text & "г."
 If CheckBox_mail.Value = True Then
 program_1 = "C:\Program Files\The Bat!\thebat.exe /MAILU=" & mailbox_1 & ";TO=" & mailbox_2 & _
 ";S=" & tema & ";FILE=" & "c:\pochta.rar" & ";SEND=" & mailbox_1
 taskid = Shell(program_1, 1)

Комментарии к написанному:
mailbox_1 - ящик отправителя;
mailbox_1 - ящик получателя;
в переменной tema нужно указывать все без пробелов (то, что идет после пробела - отсекается)
Это конечно не идеал, поскольку это как-бы командная строка, но зато работает! Если у кого-то будут замечания или предложения, то пишите на мыло: zukrsugzav@sugarunion.com.ua.
09.02.2013 03:15:22
Если через TheBAT! отправлять - то зачем было изобретать велосипед,
код для отправки писем ведь давно написан и опубликован:
http://excelvba.ru/code/TheBAT
Сергей
07.10.2012 11:29:34
Привет подскажите как прописать макрос для отправки письма по скрытой копией.
07.10.2012 11:33:41
Добавьте после строки
.To = Range("A1").Value
строки:
.Cc = Range("A1").Value      'простая копия
.Bcc = Range("A1").Value    'скрытая копия
и будет вам счастье :)
Евгений
07.10.2012 12:30:41
Добрый день! Подскажите пожалуйста хотя бы примерный текст макроса для отправки данных через Lotus Notes.
Заранее большое спасибо!!.
DaddyD
07.10.2012 12:32:44
Подскажите, если в Outlook-е несколько учетных записей, как отправить мэйл с другой, не основной учетной записи Outlook-а?
07.10.2012 12:34:57
Перед Send вставить строку:
Set .SendUsingAccount = .Session.Accounts.Item("Hotmail")
где Hotmail - название требуемой учетной записи в вашем Outlook-е
30.01.2013 16:56:20
Скажите , можно ли вместо номера аккаунта или имени учетной записи ("Hotmail"), подставить ячейку в екселе где будет тот же номер или имя учетной записи ?

что-то типо вот этого...

Set .SendUsingAccount = .Session.Accounts.Item(Range("A15").Value)
massag
07.10.2012 12:35:59
Как отправить файл по эл.почте(Outlook)если база состоит из 10 клиентов т.е у каждого свой эл.адрес.
07.10.2012 12:39:39
Я для этого в свое время писал специальный макрос с диалогом. Посмотрите в PLEX функцию почтовой рассылки.
Денис
07.10.2012 12:37:08
Генерирую и отправляю сообщения, третьим способом.
Но так и не разобрался, как в body сделать перенос на новую строку? пока получается все сплошным текстом.
DaddyD
07.10.2012 12:37:57
Можно так:
 .Body = "Строка 1" & vbNewLine & _
 "Строка 2" & vbNewLine & _
 "Строка 3" & vbNewLine & _
 "Строка 4" & vbNewLine & _
 "Строка 5".
24.12.2012 19:13:51
Как избавится от надоедливой таблички с РАЗРЕШИТЬ/ЗАПРЕТИТЬ?
Антивирь стоит, безопасность макросов низкая.
excel 2010, win7x64
уже всё пересмотрел, но найти где отключается не смог....
16.01.2013 16:55:55
Надо отключить оповещения строкой:
Application.DisplayAlerts = False
16.01.2013 18:38:57
это я знаю и это есть, но не помогает.
20.01.2013 19:36:22
Попробуйте в Outlook: Файл- Параметры-Центр управления безопасностью-Параметры центра упр безопасностью - Программный доступ - Никогда не предупреждать о подозрительной активности.  
21.01.2013 11:31:25
Проверил, но это уже было сделано.

Выходит что реально никак, в аутлуке все предупреждения отключены, в екселе тоже. В макросе Application.DisplayAlerts = False. Антивирусник установлен (поскольку читал о том что если нет антивиря тоже влияет). Что ему еще не хватает для самостоятельной рассылки, не понимаю)))
24.01.2013 14:41:08
Пришлите посмотреть на daddyd@mail.ru. Интересно, может, и мне когда понадобится .... ;)
SVM
10.07.2013 17:05:58
Это внутренняя защита Microsoft от рассылки спама. Она не отключается. Но можно обойти средствами API. Основано на программном поиске на  экране окна сформированного сообщения, поиске в окне сообщения кнопки Отправить и ее нажатии. На форуме это обсуждалось, примеры приводились Поищите.
22.05.2013 10:15:42
Николай, подскажи пожалуйста как добавить строку для гиперссылки.
Чтоб при отправке в письме указывалась гиперссылка.
26.05.2013 09:44:51
Сергей, для создания ссылки можно использовать стандартный тег ссылки из HTML. Выглядит примерно так:
<A HREF="C:\Документы\Бюджет.xlsx">Скачать файл</A> 
Посмотрите справку HTML по тегу <A> для подробностей
14.06.2013 16:09:06
Николай, подскажите как сделать гиперссылку для сетевого ресурса, к примеру \\fileserver\документы\
01.06.2013 11:05:39
Думаю, тут уместно будет написать пример работающего кода :


Sub Create_Mail()
Dim objOutApp As Object, objMail As Object
Set objOutApp = CreateObject("Outlook.Application")
Set objMail = objOutApp.CreateItem(0)
With objMail
   .To = "Me@mymail.ru"
   .Subject = "Hyperlink Chreck"
   .htmlbody = "<a HREF=""http://htmlbook.ru/html/a"">Скачать файл</a>"
   .display
   Set objMail = Nothing
End With
Set objOutApp = Nothing
End Sub
07.06.2013 15:12:30
Спасибо за очень полезный макрос.
А можете ещё подсказать, как задать отметку «К исполнению» -  для получателя, и чтобы с уточнением времени ответа? И также интересует, как поставить отметку с важностью письма.
12.06.2013 15:59:29
.MarkAsTask - метод для пометки к исполнению. В зависимости от значения параметра задается срок.
Возможные значения можно посмотреть тут:http://msdn.microsoft.com/en-us/library/office/ff868356.aspx
свойство .Importance задает важность (например строка ".importance = 2" проставит отметку "Высокая важность")  
10.06.2013 16:34:48
А как отправить через Oulook Express? Ибо с MS Office Outlook не работают, а именно его и требует данный макрос.
13.06.2013 09:31:13
Не встречал такого в принципе. В Outlook Express нет VBA, соответственно, никакой автоматизации там нет в принципе. Может проще поставить полноценный Outlook? :)
25.06.2013 13:39:33
Dim o_Mess As Object, v_Conf As String, email As String
v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
Set o_Mess = CreateObject("CDO.Message"
With o_Mess
    .To = email
    .From = "АДРЕС ПОЛУЧАТЕЛЯ"
    .Subject = "ТЕМА"
    .TextBody = "ТЕЛО СООБЩЕНИЯ"
    .AddAttachment "ПУТЬ К ФАЙЛУ КОТОРЫЙ ПРИКЛАДЫВАЕМ К ПИСЬМУ"
With .Configuration.Fields
    .Item(v_Conf & "sendusing" = 2
    .Item(v_Conf & "smtpserver" = "SMTP сервер"
    .Item(v_Conf & "smtpauthenticate" = 1
    .Item(v_Conf & "sendusername" = "АДРЕС ОТПРАВИТЕЛЯ"
    .Item(v_Conf & "sendpassword" = "ПАРОЛЬ"
    .Item(v_Conf & "smtpserverport" = 25
    .Item(v_Conf & "smtpusessl" = False
    .Item(v_Conf & "smtpconnectiontimeout" = 60
    .Update
End With
    .send
End With
Set o_Mess = Nothing
Как альтернатива. Работаю программистом пишу на C#, работаю с базами данных промышленных назначений.
01.07.2013 21:15:49
Лучше все-таки прокомментировать этот неработающий кусок кода для непрограммистов на C# :)
10.07.2013 17:25:28
Подскажите пожалуйста, а как во втором макросе прикрепить текущий лист? Как в первом макросе
08.10.2013 11:13:59
Замените ThisWorkbook.Sheets(1).Copy на ActiveSheet.Copy
04.10.2013 17:49:34
Существуют ли способы скрытой отправки файла целиком, на определенный адрес без использования почтовых программ. Например что бы после закрытия файла он автоматически отправлялся?
08.10.2013 11:12:02
Можно использовать CDO, но только в Windows XP. Посмотрите тут.
09.10.2013 20:58:19
Отлично! По 2 способу и через The Bat!  отправляет, НО отправляет всю книгу, а не 1 лист! Хотелось бы узнать как можно отправить только 1 лист из книги, а не 12 как у меня например
20.10.2013 10:13:34
Здравствуйте!
А можно ли отправить письмо для множества адресов через
.To = Range("A1").Value
Все адреса располагаются в строчках, и меняются в зависимости выбранных ранее данных, так что перелинковка на ячейку обязательна!
21.12.2013 13:05:37
Поддерживаю вопрос. Как в макросе указать диапазон ячеек со списками получателей, тем, тел писем и вложений?
22.12.2013 00:49:01
Здравствуйте Александр, задать диапазон не получилось, Пришлось сделать в ручную.

SM.to = Range("'Лист1'!g2").Value & ";  
" & Range("'Лист1'!g3").Value & "; " & Range("'Лист1'!g4").Value & "; " & Range("'Лист1'!g5").Value & "; " & Range("'Лист1'!g6").Value
03.04.2014 13:27:05
Приветствую! Есть решение по отправке выделенного диапазона!  Решается путем экспорта-импорта HTML. Если вопрос остался актуальным - обозначьтесь. Скрипт получился не коротким. Но если надо - выложу.
31.12.2014 13:24:26
Здравствуйте Дмитрий,

Можете виложыть скрипт, о котором вы писали више?
04.01.2015 11:00:04
Приветствую, Богдан!
пример с отправкой выделенного диапазона выложил здесь:
https://yadi.sk/i/eGm0_xSWdmnME
Будут вопросы - пишите.
Удачи!
17.12.2013 14:59:16
Николай, подскажите, если необходимо отправлять файл в определенное время, то это можно реализовать в макросах? Либо есть какой-то другой более легкий способ?
04.01.2014 12:13:41
Можно, но книга, где будет лежать такой макрос должна быть все время открыта, а макрос постоянно запущен, что блокирует всю остальную работу в Excel. Если у вас для этого есть отдельный свободный компьютер... :)
09.01.2014 08:34:15
Здравствуйте!
При отправке одного листа как вложения документ Excel называется "Книга1". Как сделать, чтобы было изначальное название?
Спасибо!
11.06.2016 11:46:02
Присоединяюсь к вопросу, только хотелось бы имя для вложения брать из ячейки с этого же листа.
14.01.2014 13:56:15
Добрый день!
Это просто класс, все работает, как часики.
Только один вопрос, на данный момент я сделал что бы файл открывался в определенное время, обновлял данные, сохранял файл в архив, отправлял по почте и закрывался сам, но он отправляет файл целиком и  соответственно когда я открываю файл он все делает и опять закрывается :)
можно ли в третьем примере отправлять выбранные по условию данные,  скопированные из этой же книги?
17.01.2014 19:54:25
Добрый день,

Подскажите, нигде в интернете ничего и близко не могу найти.

Составляю письмо с помощью VBA
в тело сообщения пишу текст например:
.TextBody = "ТЕЛО СООБЩЕНИЯ"


вопрос: можно ли текст каким либо образом форматировать?
например: сделать слово ТЕЛО полужирным, а СООБЩЕНИЯ оставить нормальным.

Подскажите, можно ли это как-то реализовать? Заранее благодарен.
04.04.2014 10:36:20
Приветствую, Виталий!
Если еще актуально, предлагаю следующий вариант форматирования текста в теле письма:

.HTMLBody = "<p style='font-family:Tahoma;font-size:12'>" & "Текст со шрифтом Tahoma, размер 12 " & vbCrLf & _
                        "<p style='font-family:Kozuka Mincho Pro H;font-size:16'>" & "Текст со шрифтом Kozuka Mincho Pro H, размер 16 "
------------------------------
работает в 10 Офисе
30.01.2014 22:56:06
Может кому и пригодится. Прокомментирую код  Дениса Скотинцева.
Код рабочий, только с ошибками, скобочек ) не хватает. Отправляет письма безо-всяких запросов.
Работает на всех версиях Excel.
Sub SendMail()
'Обязательно подключить библиотеку  Tools->References <<Microsoft CDO for Windows 2000 library>>

    Dim o_Mess As Object, v_Conf As String, email As String, i_Paht As String
    
    v_Conf = "http://schemas.microsoft.com/cdo/configuration/"
    i_Paht = ThisWorkbook.Path & "\ваша книга.xlsx" ' указываем полный путь к файлу, который хотим вложить
    email = "КОМУ@mail.ru"   'e-mail получателя
    Set o_Mess = CreateObject("CDO.Message" )   'Создаем сообщение
    With o_Mess
        .To = email   'Кому
        .From = "От Кого"   'От кого
        .Subject = "Привет"   'Тема письма
        .TextBody = "Большой привет от VBA"   'Текст письма
        If Len(i_Paht) > 0 Then .AddAttachment i_Paht   'вкладываем файл
        With .Configuration.Fields   'конфигурируем CDO
            .Item(v_Conf & "sendusing") = 2
            .Item(v_Conf & "smtpserver") = "smtp.mail.ru" 'ваш сервер SMTP:smtp.mail.ru; smtp.yandex.ru; mail.rambler.ru
            .Item(v_Conf & "smtpauthenticate") = 1
            .Item(v_Conf & "sendusername") = "ВАШ@mail.ru" 'Ваша учетная запись
            .Item(v_Conf & "sendpassword") = "пароль" 'Ваш пароль к почтовому ящику
            .Item(v_Conf & "smtpserverport") = 465 'номер порта(узнать на сайте вашей почты)
            .Item(v_Conf & "smtpusessl") = True
            .Item(v_Conf & "smtpconnectiontimeout") = 60
            .Update
        End With
        .Send 'отправляем
    End With
    Set o_Mess = Nothing
End Sub
04.02.2016 13:44:48
ошибка "файл занят другим процессом", имеется необходимость автоматически отправлять файл на почту каждый день. открывать через планировщик. Далее макрос обновляет данные и отправляет, без подтверждения, как в теме обсуждения.
30.01.2014 23:03:26
Ну вот, та же ошибка. При вставке кода, закрывающая скобка ), заменяется смайликом. Смайлик удаляешь, а про скобку забываешь!
Отредактировал, теперь код верный.
03.02.2014 15:29:51
Здравствуйте а подскажите как прописать макрос даже не знаю как объяснить какой но попробую
у нас в одном файле лежат эл. адреса на эти эл. адреса нужно отправить отсканированный лист но каждую неделю листы меняются  
17.02.2014 16:10:22
Здравствуйте Николай!

Пожалуйста, помогите!
Когда отправляю лист по 2-ому способу, записанный на листе макрос (для защиты ячейки)  не работает у получателя. Код защиты для ячейки приведен ниже:

Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, [S2:AG63]) Is Nothing Then _
   With Application: .EnableEvents = 0: .Undo: .EnableEvents = -1: End With
End Sub
30.05.2014 18:40:08
Здравствуйте!

Подскажите, пожалуйста, как заменить в макросе почтовый клиент Outlook на Windows Live:

Set OutApp = CreateObject("Outlook.Application" 'запускаем Outlook в скрытом режиме
22.07.2014 11:41:47
Никак. Нужна локальная установленная на компьютере почтовая программа-клиент.
08.07.2014 20:23:16
Здравствуйте!
Подскажите пожалуйста, как установить отчет о доставке и о прочтении, да и подпись к письму не мешало бы!
Спасибо!
17.07.2014 18:06:34
Здравствуйте,
почтовый клиент Mozilla Thunderbird, макрос работает отлично, есть ли возможность запускать почтовое приложение в фоновом режиме, или например закрывать клиента после отправки? Нагуглил разные варианты  работы VBA c Windows приложениями используя API, но знаний не хватает применить. А еще в треде был вопрос о присвоении файлу имени листа при отправке (вместо Книга1), возможно ли это?  
21.07.2014 16:33:17
Добрый день.
Помогите, кто может, я не сильно разбираюсь в VBA.
Есть задача отправлять макросом вложение (книгу или лист) по почте Lotus.
Для Outlook вроде все понятно, но в моем случае, по способу 2 мне не хватает только Body.
Можно ли решить эту проблему?

Так видимо здесь и не дождусь ответа (((
04.01.2015 17:07:08
Ну, здесь мы больше по Microsoft Office специализируемся :)
Но поиск в гугле по первой ссылке дал вот это.
Поможет?
12.09.2014 16:34:34
Добрый день,
можно ли отправлять письма с помощью макроса не на адрес *@*.com, а на группу рассылки, созданную в Outlook?
Спасибо!
24.09.2014 15:34:57
Добрый день.
Пытаюсь облегчить себе работу с помощью третьего макроса, все работает.
Подскажите что мне необходимо исправить в строчке:

".Attachments.Add Range("A4").Value"

чтобы отправлялся активный лист(отредактированный) с активной книги(то есть книги где макрос)???

Заранее спасибо за помощь!
15.11.2014 12:36:46
Одной строчкой это не сделать. Надо предварительно копировать ваш текущий лист в новую книгу, а потом уже прикреплять ее к созданному сообщению.
20.11.2014 14:26:44
Николай добрый день.
Подскажите пожалуйста что необходимо изменить в строке
".Attachments.Add Range("A4";).Value"
чтобы не путь к вложению указывать, а просто вкладывать в новое сообщение активный файл.
Заранее спасибо.
20.11.2014 14:53:08
Сам разобрался.

поменял эту строку на такую
.Attachments.Add ThisWorkbook.FullName
Может быть кому-нибудь пригодится
09.12.2014 16:00:49
Добрый день!

Спасибо! Все работает, но интересует, что необходимо дописать в макросе для переформатирования перед отправкой в формат XPS
10.01.2015 09:22:13
Для сохранения книги в XPS можно использовать команду
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypeXPS, Filename:= _
     "C:\Договоры\Book1.xps", Quality:=xlQualityStandard, _
     IncludeDocProperties:=False, IgnorePrintAreas:=False, OpenAfterPublish:= False

А потом прикреплять к письму сохраненный файл как вложение.
22.12.2014 21:04:35
Добрый день!
Подскажите, пожалуйста, как в 3-м способе сделать так, чтобы при создании письма из Ехсель с помощью VBA в письмо автоматически добавлялась подпись, та которая настроена у сотрудника для указания при создании новых сообщений. Заранее спасибо!!!
04.01.2015 17:03:08
Насколько я знаю - никак. Самое простое - добавить подпись в исходное сообщение как текст. Один из вариантов реализации есть тут.
07.01.2015 12:24:21
Ок, спасибо большое!
08.01.2015 18:44:18
Николай, добрый день,
Такой вопрос, можно ли во втором макросе (отправка листа) задать тело сообщения каким либо способом?
Спасибо.
10.01.2015 09:15:56
Богдан, насколько я знаю - нет. Метод SendMail не имеет возможности задать тело письма, только тему и получателей.
13.01.2015 16:36:12
Приветствую!
Большое спасибо за материал.
Использую второй макрос, хотелось бы знать можно ли как-то в тело письма вставить таблицу с активного листа, и желательно с сохранением форматирования (граница, заливка и т п).
20.01.2015 10:49:35
10.03.2015 16:03:46
Здравствуйте!
Подскажите пожалуйста, как нужно изменить строку ссылающиеся на документ, чтобы прикрепить несколько документов из одной папки
14.08.2015 00:59:03
Здравствуйте.

Подскажите пожалуйста, как отправить диапазон ячеек на основе этого примера https://yadi.sk/i/eGm0_xSWdmnME только нужно с помощью VBA и одновременно нескольким (выделенным в отдельных ячейках) получателям. А также, возможно ли, автоматическое выделение или копирование на другие ясейки, тех адресатов, которые были в списке рассылки. Заранее благодарю всех участнико...
20.08.2015 12:43:34
Приветствую. Делается элементарно.
Надо просто сформировать имя для отправки, которое состоит из перечня адресов. Это можно сделать простым перечислением ячеек, где расположены адреса:
Out_Mail = Cells(5, 5) & "; " & Cells(6, 5) & "; " & Cells(7, 5)
или, если адресов много, сделать цикл. К примеру:
-------------------------------
Out_Mail = ""
   For i = 5 To 7
       Out_Mail = Out_Mail & Cells(i, 5) & "; "
   Next i
-------------------------------
В строке отправки ставим .to = Out_Mail
пример здесь: https://yadi.sk/i/4pFQnK2QiYzMs
Удачи!
14.08.2015 01:06:00
макросом VBA без использования почтовых программ!!!!
22.08.2015 02:09:56
Здравствуйте, Дмирий.

Большое спасибо за ответ.

Подскажите,пожалуйста ещё такие моменты:
- Как отправлять ссылки в теле письма на основе Вашего примера?
- Можно ли  давать команду на отправку с другого листа книги?

Заранее благодарю.
24.08.2015 18:24:40
Ребята, помогите, пожалуйста - очень нужно!!!!
26.10.2015 13:08:58
Приветствую!
Отправлять ссылки можно. Второй вопрос не совсем понял, что находится на втором листе?
Пример здесь:
https://yadi.sk/i/h66sF01Tjzusv
26.10.2015 22:31:25
Дмитрий, здравствуйте.
Я имел ввиду - как сделать, чтобы отправлять диапазон расположенный к примеру на Лист1, а кнопку для отправки этого диапазона разместить на Лист2.
27.10.2015 09:17:24
Правильно поставленная задача - уже половина ее решения ;)
Для этого надо просто активировать лист, где находится фрагмент таблицы, а в конце, по желанию, скакнуть обратно.
См здесь: https://yadi.sk/i/4IL6Vk22k37sd
22.09.2015 23:30:44
отправка определенных ячеек
Sub Письмо()
    
    Dim OutApp As Object
    Dim OutMail As Object
    Dim rng As Range
    Dim MyDate
    MyDate = Format(Date, "DD.MM.YYYY")

    
    With Application
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
    Set rng = Nothing
    Set rng = ActiveSheet.Range("AI32:CF34")


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

    On Error Resume Next
    With OutMail
 
      .To = "dddd@mail.ru"
      .Subject = "Пример отправки фрагмента таблицы. Сегодня " & MyDate
        
  
        
        
        .HTMLBody = "<p style='font-family:Tahoma;font-size:12'>" & "Добрый День!" & vbCrLf & _
                    "<p style='font-family:Tahoma;font-size:12'>" & "Отчет по анкетам:" & _
                    RangetoHTML(rng) & vbCrLf & _
                    "<p style='font-family:Tahoma;font-size:12'>" & "" & vbCrLf & _
                    "<p style='font-family:Tahoma;font-size:12'>" & ""

     
        .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)
    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


 
14.10.2015 08:56:51
Добрый день!
Помогите пожалуйста составить макрос или через УФ. Суть такова:
Есть к примеру в ячейке "В2" Город получатель(города разные)...необходимо что бы при активации(как при гиперссылке) данного города отправлялось письмо с текстом и номером индекса(индексы тоже разные), который находится в ячейке "А1", либо при вводе текста в ячейке "С1".."Запрос"...автоматически уходило письмо в город получатель("B2" )с текстом и номером индекса("A1").
Это можно как-то реализовать?
Заранее спасибо!
14.10.2015 14:47:39
Приветствую!
Простой вариант реализации такой задачи макросом здесь:
https://yadi.sk/i/z8jERgEPjjANs
Удачи!
26.10.2015 22:29:58
Второй вопрос не совсем понял, что находится на втором листе?
Дмитрий, здравствуйте.
Я имел ввиду - как сделать, чтобы отправлять диапазон расположенный к примеру на Лист1, а кнопку для отправки этого диапазона разместить на Лист2.
27.10.2015 09:57:31
Ответил. см выше
28.10.2015 19:19:58
Добрый вечер! Подскажите пожалуйста, везде читал смотрел, но не нашел решение проблемы. Необходимо отправить письмо с excel с вложением текущей книги(без указания пути, т.к. путь все время будет менять, т.к. будет меняться имя файла), при этом чтобы открывалось окно сообщения в outlook, для написания текста(текст с ячейки не варианта, в моем случае не удобно), но адресат уже заложен в макросе. Тему же можно оставить чтобы брал с ячейки. В данной теме и вообще нашел чтобы просто отправлял с вложением текущей книги без открытия окна сообщения, либо открывал окно сообщения, но при этом письмо было без вложения текущего файла. Повторюсь, необходимо чтобы вложением являлся текущий файл, без указания пути к нему. Спасибо большое!
29.10.2015 13:39:05
Приветствую, Иван!
Не понял, чем "Окно сообщения" принципиально отличается от драфта письма?
Берем классический пример Способ 3. Универсальный макрос (см выше), в строке вложения пишем:
.Attachments.Add ActiveWorkbook.FullName
Строку .Send меняем на .Display. Запускаем макрос, пишем нужный текст и отправляем письмо.
25.04.2016 13:54:41
Добрый день
Или с макросом №2 что-то не так, или с моим пк
Письмо пришло - отправляла несколько раз, все ОК, но в почтовике в "отправленных" нет.
Не подскажите что это может быть? офис 2010
11.06.2016 11:50:13
Выше задавали вопрос как используя второй способ  при отправлении листа задать ему имя из ячейки, а то уходит с именем Книга1?
12.06.2016 15:19:04
Николай, здравствуйте.
Нашел на просторах сети вот такой ккод

Option Explicit
Sub Send_Mail()
   Dim objOutlookApp As Object, objMail As Object
   Dim sTo As String, sSubject As String, sBody As String, sAttachment As String
   Application.ScreenUpdating = False
   On Error Resume Next
   'пробуем подключиться к Outlook, если он уже открыт
   Set objOutlookApp = GetObject(, "Outlook.Application";)
   Err.Clear 'Outlook закрыт, очищаем ошибку
   If objOutlookApp Is Nothing Then
 Set objOutlookApp = CreateObject("Outlook.Application";)
   End If
   objOutlookApp.Session.Logon
   Set objMail = objOutlookApp.CreateItem(0)   'создаем новое сообщение
   'если не получилось создать приложение или экземпляр сообщения - выходим
   If Err.Number <> 0 Then Set objOutlookApp = Nothing: Set objMail = Nothing: Exit Sub
   
   sTo = "AddressTo@mail.ru"    'Кому(можно заменить значением из ячейки - sTo = Range("A1";).Value)
   sSubject = "Автоотправка"    'Тема письма(можно заменить значением из ячейки - sSubject = Range("A2";).Value)
   sBody = "Привет от Excel-VBA"    'Текст письма(можно заменить значением из ячейки - sBody = Range("A3";).Value)
   sAttachment = "C:\Temp\Книга1.xls"    'Вложение(полный путь к файлу. Можно заменить значением из ячейки - sAttachment = Range("A4";).Value)
   
   'создаем сообщение
   With objMail
 .To = sTo 'адрес получателя
 .CC = "" 'адрес для копии
 .BCC = "" 'адрес для скрытой копии
 .Subject = sSubject 'тема сообщения
 . = sBody 'текст сообщения
 '.HTMLBody = sBody 'если необходим форматированные текст сообщения(различные шрифты, цвет шрифта и т.п.)
 .Attachments.Add sAttachment 'чтобы отправить активную книгу вместо sAttachment указать ActiveWorkbook.FullName
 .Send 'Display, если необходимо просмотреть сообщение, а не отправлять без просмотра
   End With
   Set objOutlookApp = Nothing: Set objMail = Nothing
   Application.ScreenUpdating = True
End Sub
[CODE][/CODE] Не могу понять что изменить чтобы отправлять текущий лист или текущую книгу.
Подскажите пожалуйста.

не получилось вставить в теги код, все переносы убирает.
17.06.2016 06:09:45
Всем привет.
Очень понравился макрос из шапки


Sub SendSheet()
   ThisWorkbook.Sheets("Лист1";).Copy
   With ActiveWorkbook
 .SendMail Recipients:="vasya@pupkin.com", Subject:="Лови файлик"
 .Close SaveChanges:=False
   End With
End Sub


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

В идеале - настроить отправку не самого файла, а в виде вложенной в письмо таблички с диапазоном (A1:L16)
Страницы: 1  2  
Наверх