Vba outlook создать письмо

Обновлено: 05.07.2024

Прежде чем начать читать статью прошу принять к сведению объявление: используйте СВОИ АДРЕСА ЭЛ.ПОЧТЫ при тестировании кодов . Не надо отсылать письма на указанные в статье e-mail адреса- это все приходит мне на почту. Помимо этого Вы сами не сможете понять работает или нет, т.к. письма придут мне, а не Вам.
Спасибо за понимание
P.S. А если написанное выше Вы все же проигнорировали и отправили письмо на мои адреса электронной почты - это означает, что Вы соглашаетесь с тем, что вся информация внутри письма, включая вложения, может быть использована мной без ограничений в личных целях.


Отправка через меню Excel
Отправку без кода осуществить достаточно просто:

Далее выбирается способ отправки:

Также можно указать несколько получателей:

Этот код отправляет одно письмо и одно вложение за раз. Но если несколько раз вызвать метод .Attachments.Add, то можно добавить еще файлы:

.Attachments.Add "C:\Temp\Книга1.xlsx" .Attachments.Add "C:\Temp\Книга2.xlsx" .Attachments.Add "C:\Documents\Report.rar"

objOutlookApp.Session.Logon "user","1234",False, True

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

Этот код отправляет одно письмо и вставляет одну картинку. За это отвечает строка

Если картинку надо вложить с заранее указанными размерами, то строка будет выглядеть так:

"<img src=cid:" & Replace(Dir(sPicture, 16), " ", "%20") & " height=240 width=180>" 'height - высота 'width - ширина

Если надо добавить несколько картинок, то метод .Attachments.Add sPicture надо будет вызвать столько раз, сколько картинок(для каждого свой путь к картинке).

Важно помнить: пути для картинок должны содержать полный путь до файла, включая его имя и расширение: C:\Документы\Изображения\Excel_vba_ru.jpg . При указании только имени Excel_vba_ru.jpg или пути без расширения ( C:\Документы\Изображения\Excel_vba_ru ) ошибки не будет, но картинка не будет вставлена, а вместо неё скорее всего будет текст "Ошибка загрузки картинки!" или пустой квадрат вместо реальной картинки.

  • Outlook 2007 : Меню-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)
  • Outlook 2010 и выше : Файл-Параметры-Центр управления безопасностью-Программный доступ-установить Никогда не предупреждать о подозрительной активности (не рекомендуется)

ВАЖНО: Если компьютер управляется администратором Microsoft Exchange или Microsoft Windows Active Directory Domain Services и администратором в качестве параметров по умолчанию установлен запрет на внесение изменений в параметры безопасности пользователями, возможность изменения данных настроек безопасности программного доступа будет недоступна.



Но так же при отправке файлов и писем часто необходимо не привязываться к конкретной почтовой программе. Ведь далеко не все ставят Outlook. Многие используют иные почтовые программы, например TheBat.

Данный код отправляет письмо, используя объект CDO (Collaboration Data Objects - присутствует во всех версиях Windows) и от имени Вашей учетной записи(либо Яндекс, либо Мэйл, либо Рамблер либо др.).

Это основные моменты. Поля Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) думаю не нуждаются в расшифровке.

Чтобы использовать данный код вы можете либо просто скопировать его прямо со страницы, либо скачать файл. В файле программа немного упрощена к использованию - в ячейки листа вам необходимо будет внести поля: Кому(sTo), От кого(sFrom),Тема письма(sSubject), Текст письма(sBody) и Вложение(sAttachment) и выбрать SMTPserver. SMTPserver выбирается из выпадающего списка. Сам список является динамическим и расположен на листе "Settinngs". Там же расположены поля Учетной записи и Пароль, которые автоматически подставляются в необходимые поля на листе "Отправка". Т.к. список динамический Вы можете просто добавлять к уже имеющимся новые сервисы и потом просто выбирать их из списка. Так же в файле есть еще одна возможность - выбрать файл. Для этого надо просто нажать на кнопку и выбрать файл.

Самый главный момент:
AddRelatedBodyPart

    C:\Документы\Изображения\11.jpg - указывается полный путь к файлу картинки на компьютере, включая расширение файла.
    11.jpg - указывается имя картинки с расширением. Это имя будет использовано внутри письма и именно его необходимо будет указать дальше в " urn:schemas:mailheader:Content-ID ". И указывать обязательно в треугольных скобках: " "
    внутри же самого письма в том месте, где должна отображаться картинки надо записать:

в приведенном выше коде картинка вставляется в самом начале письма и после неё так же добавляется перенос на новую строку при помощи тэга

Небольшой рецепт на MS VB для сисадминов, которые хотят упростить жизнь сотрудникам.

Есть два способа:
Шаблоны — подойдет для простых вариантов, когда все поля статичны
VBA — под катом рассмотрим пример создания простейшего шаблона на встроенном в Outlook Visual Basic.

Есть еще конечно и нормальный способ — взять программиста, который напишет автоматическую рассылку писем на любом удобном ему движке, получить данные о сотрудниках из Exchange или LDAP и все будет ок, но для этого надо бюджет. Кому интересно костыль — под кат.

VBA-макрос можно настроить на автоматическое заполнение всех полей достаточно гибко. Вызов макроса можно добавить прямо в ленту Outlook, создав для нее пиктограмму.
Пользователь может случайно удалить файл с шаблоном, или запороть его. В таких случаях, макрос надежнее, и всегда на панели быстрых кнопок.

Верстка письма в Outlook идет в HTML, и ниже — инструкция и пример простого кода, который создает письмо, аттачит две картинки с логотипами, форматирует html-тело письма, прописывает поля письма.

Как можно улучшить?
Можно добавиьт несколько inputbox, или форму с radio button, где можно будет выбрать какие-то параметры, выбирая или адресатов, или нужный подвид анонса.
Можно делать поиск по адресной книге outlook (цикл по Outlook.Application.GetNamespace(«MAPI»).AddressLists(«Global Address List»).AddressEntries), и использовать информацию из карточки (имя, проект, контактные данные), создавая персонифицированные письма.
Можно сделать несколько заготовок для разных полей, и выбирать нужное случайно или по дате/времени.

К сожалению, столкнулся с тем, что если просматривать html письма Не в desktop outlook, могут возникать проблемы

Даже родной web-интерфейс exchange по какой-то причине может откусывать части, которые он считаем лишними (у меня он не отображал картинки в заголовке таблицы, хотя отображал фотки сотрудников в той же таблице). Выяснить принцип по которому он выбирал что отображать или нет, я не смог — все файлы аттачились одинаково.
Клиент с мака видит съехавший дизайн, там еще хуже вем в web-интерфейсе.
Причина в том, что exchange переделывает весь html-код и выводит его по своим личным правилам, используя жуткие cpan вместо того, что дизайнил я (div/table. ). Попытки нагуглить решение пока печальные — видимо в текущем exchange это сделать нельзя. Если у вас были успешные решения — поделитесь!

Так как Microsoft Outlook поддерживает автоматизацию, вы можете управлять приложением Outlook из любой программы, созданной с помощью Microsoft Visual Basic. Автоматизация обеспечивает для одного приложения стандартный способ доступа к объектам, методам, свойствам и событиям другого приложения, поддерживающего автоматизацию.

Объектная модель Outlook предоставляет все функциональные возможности, необходимые для работы с данными, которые хранятся в папках Outlook, а также обеспечивает возможность управления разными аспектами пользовательского интерфейса Outlook.

Чтобы начать сеанс автоматизации Outlook, можно использовать раннее или позднее связывание. Для инициализации Outlook используется функция Visual Basic GetObject или функция CreateObject. Например, в приведенном ниже коде указывается объектная переменная для объекта Application приложения Outlook, являющегося объектом наивысшего уровня в объектной модели Outlook. В коде автоматизации сначала нужно определить объект Application приложения Outlook, чтобы обеспечить доступ к любому другому объекту Outlook.

Чтобы использовать раннее связывание, сначала нужно указать ссылку на библиотеку объектов Outlook. Используйте команду Ссылки в меню средств Visual Basic для приложений (VBA) для настройки ссылки на Microsoft Outlook xx.x Object Library, где xx.x представляет версию Outlook, с которой вы работаете. Затем можно использовать указанный ниже синтаксис, чтобы начать сеанс Outlook.

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

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

Если для создания макросов используется VBA, автоматизировать Outlook можно двумя способами. Можно реализовать макрос, создав новый экземпляр объекта Outlook приложения. Выше в методе CreateNewDefaultOutlookTask() показано, как вызвать объект New Outlook.Application , чтобы создать экземпляр объекта Application.

Предостережение Этот новый экземпляр Outlook не доверяется и может вызвать охранник объектной модели.

В качестве альтернативы созданию и автоматизации отдельного экземпляра Outlook можно с помощью VBA реализовать макрос, который автоматизирует текущий экземпляр Outlook. Для этого используйте объект Application, присущий среде. Этот объект Application является доверенным и может помочь избежать запуска защиты объектной модели. Дополнительные сведения о защите объектной модели см. в статье Новые возможности для разработчиков в Outlook 2007 (часть 1 из 2). В приведенном ниже примере показано использование методом CreateAnotherNewDefaultOutlookTask() объекта Application из текущего экземпляра Outlook.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.


В этой статье мы узнаем, как использовать Outlook в качестве объекта Microsoft из Excel с использованием кодирования VBA и как мы можем отправлять электронную почту, включая вложение, с помощью VBA.

Как использовать функцию Outlook VBA Outlook?

Чтобы использовать функцию Outlook VBA, нам нужно сделать две вещи.

  1. Ссылка на объект Microsoft Outlook из библиотеки объектов в VBA.
  2. Напишите код VBA для отправки электронных писем в модуле VBA.

Как вы знаете, Outlook - это объект, и нам нужно предоставить ссылку на объект Outlook. Итак, в VBA есть библиотека ссылок на объекты, которую нам нужно использовать для справки.

Для использования библиотеки ссылок на объекты выполните следующие действия.

Шаг 1. На вкладке «Разработчик» щелкните Visual Basic, чтобы открыть редактор VB.


Шаг 2: Перейдите в Инструменты и затем выберите Ссылки, как показано на скриншоте ниже.


Шаг 3. Прокрутите вниз в библиотеке эталонных объектов и выберите «Библиотека объектов Microsoft Outlook 16.0», чтобы сделать ее доступной для Excel VBA.


В зависимости от офиса Microsoft версия Outlook может отличаться. В нашем случае это 16.0. Вы можете использовать « Библиотеку объектов Microsoft Outlook 14.0», если это версия, показанная на вашем компьютере.

Установите флажок Microsoft Outlook, как показано на скриншоте выше. Теперь мы можем использовать объект Microsoft Outlook в Excel VBA.

Этот процесс установки ссылки на «MICROSOFT OUTLOOK 16.0 OBJECT LIBRARY» известен как «Раннее связывание». Без установки библиотеки объектов как «MICROSOFT OUTLOOK 16.0 OBJECT LIBRARY» мы не можем использовать свойства IntelliSense и методы VBA, что затрудняет написание кода.

Выполните следующие шаги, чтобы написать код VBA для отправки электронной почты из Outlook из Excel.

Шаг 1: Создайте подпроцедуру, назвав макрос. Мы будем называть макрос «send_email», как показано на скриншоте ниже.

Код:


Шаг 2: Определите переменную как Outlook. Приложение, как показано на скриншоте ниже. Это ссылка на приложение Outlook VBA.

Код:


Код:


Шаг 4: На предыдущих шагах мы определили переменную, теперь нам нужно их установить.

Теперь установите первую переменную «Приложение Outlook» как «Новое приложение Outlook.Application», как показано на снимке экрана ниже.

Код:


Шаг 5: Теперь установите вторую переменную «Outlook Mail» с помощью приведенного ниже кода.

Код:


Шаг 6: Теперь мы можем использовать VBA Outlook, используя оператор « С », как показано на скриншоте ниже.

Код:


Теперь у нас есть доступ к таким элементам электронной почты, как «Кому», «CC», «BCC», «тема», «Основная часть электронного письма» и многим другим.

Шаг 7: Внутри оператора «С» мы можем увидеть список, поставив точку, известную как «Список Intellisense».


Шаг 8: Сначала выберите формат тела как olFormatHtml, как показано на скриншоте ниже.

Код:


Шаг 9: Выберите « .Display » для отображения почты, как показано на скриншоте ниже.

Код:


Шаг 10: Выберите « .HTMLbody », чтобы написать электронное письмо, как показано на скриншоте ниже.

Код:


Нам нужно помнить несколько вещей при написании письма в коде VBA.

«
»Используется для включения разрыва строки между двумя строками. Чтобы добавить подпись в электронное письмо, вам нужно ввести «& .HTMLbody»

Ниже приведен пример того, как написать письмо в VBA.

Код:


Шаг 11: Теперь нам нужно добавить получателя письма. Для этого вам нужно использовать «.To».

Код:


Шаг 12: Если вы хотите добавить кого-либо в «CC» и «BCC», вы можете использовать «.CC» и «.BCC», как показано на скриншоте ниже.

Код:


Шаг 13: Чтобы добавить тему для письма, которое мы отправляем, мы можем использовать « .Subject », как показано на скриншоте ниже.

Код:


Шаг 14: Мы можем добавить нашу текущую рабочую книгу в виде вложения в электронное письмо с помощью свойства «.Attachment». Для этого сначала объявите переменную Source как строку.

Код:


Затем используйте следующий код, чтобы прикрепить файл в письме.

Код:


Здесь ThisWorkbook используется для текущей книги и. FullName используется для получения полного имени листа.


Итак, код наконец готов к отправке по электронной почте. Нам нужно просто запустить макрос сейчас.

Шаг 16: Запустите код, нажав F5 или кнопку Run, и посмотрите результат.

Окончательный полный код

Код:

Пример функции Outlook VBA

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

« Привет, команда

Просим вас сообщить о ваших действиях по каждому из последующих пунктов до 11 часов утра сегодня.

С уважением,

неизвестный

Выполните шаги, указанные выше, для ссылки на объект Microsoft и написания кода VBA, или вы можете просто изменить код соответствующим образом.

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

Ниже приведен модифицированный код, который мы используем для написания этого письма.

Код:


После запуска макроса вы увидите, что письмо было отправлено автоматически из вашего внешнего вида.

То, что нужно запомнить

  • Во-первых, убедитесь, что вы установили Microsoft Outlook на свой компьютер и вы вошли в свою учетную запись.
  • Убедитесь, что флажок для Microsoft Outlook в ссылке на библиотеку объектов всегда установлен. Код не запустится и выдаст ошибку, если она не проверена.
  • Определение переменных и установка переменных очень важны в кодировании VBA. Без переменных код не будет работать.
  • Убедитесь, что если вы хотите добавить подпись в почте, сначала у вас должна быть хотя бы одна подпись, уже созданная в outlook.
  • Всегда используйте «
    »Для ввода пробелов в почте.

Рекомендуемые статьи

Это руководство по VBA Outlook. Здесь мы обсудим, как отправлять электронные письма из Outlook, используя коды VBA в Excel вместе с примером и загружаемым шаблоном Excel. Ниже приведены несколько полезных статей о Excel, связанных с VBA.

Читайте также: