Vba в outlook как запустить

Обновлено: 04.07.2024

В Microsoft Office мы используем Visual Basic для приложений (VBA) для создания пользовательских программ, которые расширяют базовую функциональность Office и помогают экономить время за счет автоматизации повторяющихся задач. Мы называем эти небольшие программы VBA .

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

  • Сначала основы: мы научимся вставлять и сохраните простой настраиваемый макрос VBA в активном сеансе Outlook.
  • Затем мы настроим среду разработки макросов на нашем компьютере.
  • Мы пройдем через самые простые примеры Outlook VBA. Это поможет вам понять основы разработки макросов и позволит вам писать простые макросы.
  • Далее мы продолжим и определим ярлык для нашего макроса на панели быстрого доступа. Это позволит нам с легкостью запустить макрос.
  • И мы закончим, включив макросы Outlook и обработав их настройки безопасности, чтобы гарантировать, что код действительно будет запускаться при появлении запроса на наших компьютерах.

Могу ли я записать макрос Outlook?

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

Примечание. Вам интересно узнать, как на самом деле работает средство записи макросов Office, я бы порекомендовал изучить руководства по макросам MS Word и Excel VBA по макросам.

Написание макросов VBA в Outlook

  1. Прежде всего, откройте Microsoft Outlook.
  2. Теперь, продолжайте и нажмите кнопку Alt + F11 .
  3. Откроется интегрированная среда разработки (IDE) для разработчиков VBA.
  4. Разверните дерево проекта до узла ThisOutlookSession .
  5. Щелкните правой кнопкой мыши ThisOutlookSession , а затем нажмите Insert .
  6. Теперь вы вставите модуль Visual Basic. Для этого выберите Module .
  7. Вставьте код VBA в окно Module .
  8. Нажмите File , затем выберите Сохранить .
  9. Идите и закройте Developer окружающая среда. Это вернет вас к пользовательскому интерфейсу Outlook.

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

Как настроить вкладку разработчика в Outlook?

Если вы часто разрабатывая макросы Outlook, вы можете настроить среду разработки Office. Звучит фантастически, не правда ли? На самом деле это довольно простая процедура. Прочтите подробности:

  1. Откройте Outlook , щелкните правой кнопкой мыши верхнюю область ленты и выберите Настройте ленту .


  1. Проверьте запись Разработчик и нажмите


  1. Теперь вы найдете меню разработчика на ленте.

Полезные примеры Outlook VBA

Дополнительно Примечание. Вы можете использовать предопределенные шаблоны Outlook при определении новых электронные письма с VBA. Для этого вам необходимо использовать метод CreateItemFromTemplate и указать расположение файла шаблона Outlook (*. oft ).

Программная отправка электронного письма

Если вы хотите, чтобы Outlook отправлял только что созданное электронное письмо автоматически, вы можете добавить следующую строку в код, опубликованный выше . Вставьте следующую строку перед оператором End Sub предыдущего фрагмента.

Прикрепите файл к электронному письму

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

Создание задачи с помощью VBA

Следующий фрагмент кода создает задачу Outlook, назначает ее другой человек и устанавливает тему и основной текст задачи.

Сохранить как HTML

Вопросы, связанные с макросами Outlook

Где хранятся макросы в Outlook?

Вы могли бы бродить, где именно хранится ваш использованный макрос. Что ж, в отличие от, например, Excel, который позволяет хранить макросы в файле personal.xlb или в определенных электронных таблицах; все макросы Microsoft Outlook хранятся в одном глобальном файле в вашей файловой системе. В частности, файл, в котором хранятся все ваши макросы, называется VBAProject.otm. Этот файл находится по адресу: C: users AppData Roaming Microsoft Outlook.

Кнопка быстрого доступа для макросов Outlook

  1. Откройте Microsoft Outlook, если он еще не открыт.
  2. Щелкните правой кнопкой мыши. в верхней части ленты Outlook и выберите Настроить панель быстрого доступа .


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


  1. Выберите только что созданный макрос и нажмите Добавить .


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


Как включить макрос в Outlook?

  1. Далее необходимо разрешить Outlook запускать наш VBA макрос. По умолчанию Microsoft Office отключает макросы и не разрешает их, поэтому нам нужно определить e надлежащую безопасность макросов, чтобы разрешить запуск вашего настраиваемого макроса Outlook.
  2. В Outlook 2016 щелкните Developer на ленте и выберите Макрос безопасность .


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

Как использовать макрос Outlook?

И последнее, но не менее важное: теперь он время для запуска вашего вновь созданного макроса.

Дополнительные идеи для макросов Outlook

Некоторые из наших читателей спрашивали, можем ли мы указать дальнейшие идеи для Outlook Automation. Вот несколько из них, с которых можно начать.

Дальнейшие действия

  • Нужна конкретная помощь по VBA? Не стесняйтесь обращаться к нам за индивидуальным предложением.

Вы обнаружите, что настройки «Уведомления для макросов с цифровой подписью» и «Уведомления для всех макросов» не соответствуют работаете в Outlook 2016?

Работает нормально в Outlook 2013, похоже, не получается заставить его работать в 2016.

Не могу понять, есть ли ошибка в Outlook 2016 или нет.

Большое спасибо. Это поможет мне сэкономить 400 минут (

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

Привет,
Не могли бы вы прислать нам пример макроса в Outlook, сохраняющего объединенный файл в определенном каталоге, например c: mydir.
Заранее благодарим за помощь
С уважением

Спасибо за отличное объяснение. Есть ли способ назначить сочетание клавиш? Пытался поискать, но похоже, что это не решение?

Отличная статья. Я заинтересован в сохранении моих заметок в текстовые файлы. Я могу делать это одно за другим с помощью мыши и/или клавиатуры. Было бы неплохо сделать макрос!

Так как 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 и обратная связь.

Небольшой рецепт на 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 это сделать нельзя. Если у вас были успешные решения — поделитесь!

Привет, Хабр! Я Сергей Чебарев, аналитик в команде визуализации данных «Северсталь-инфокома», и сегодня я расскажу, как можно, используя VBA и приложения Office, автоматизировать рутину в работе. VBA (Visual Basic for Applications) – это упрощенная версия Visual Basic, встроенная в множество продуктов Microsoft Office, и соответственно, эти продукты можно подружить между собой.

Самое очевидное применение VBA (который ещё часто и не вполне корректно называют макросами) – это автоматизация типовых задач с множеством повторяющихся шагов, делать которые руками долго, скучно и чревато ошибкам от усталости. Рассмотрим одну из таких задач.

Создание событий в Outlook через Excel

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

Звучит на первый взгляд не очень сложно, но:

Приглашения нужно отправлять из общего почтового ящика

Тело приглашения должно содержать корпоративный стиль оформления

Есть лимит по количеству пользователей на терминальном сервере в сутки, поэтому необходимо следить за количеством событий

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

Как же упростить эту рутину, используя Excel, Outlook и VBA? Рассказываю​

Распишем действия по шагам.

1. Создаем книгу Excel и получаем данные из календаря

В таблице теперь видны все созданные события, но нам необходимо видеть ещё и дни, где пока нет событий. Для этого мы создаем новый запрос и вызываем функцию List.Dates:


Она нам создаст список дней, начиная с сегодняшнего, на 21 день вперед:


Теперь объединим 2 данных запроса в один. Для этого переводим лист с датами в таблицу с помощью инструмента “В таблицу” на вкладке “преобразование” и переходим на запрос, где мы собрали все приглашения из почты, после чего на вкладке “Главная” выбираем инструмент “Добавить запросы”. Выбираем созданную ранее таблицу с датами и объединяем:


*Важно, при объединении столбцы в таблицах должны иметь одинаковые названия.

Создаем дополнительные столбцы «Subject», «Location» и «Статус брони», которые будут нести информацию о теме события, локации события и о том, из какого запроса пришли данные: если из календаря, то «Бронь», если из вызванной функции — «Свободно». Делаем сведение по столбцу «Статус брони» для определения количества свободных окон по дням и присваиваем статус для возможности бронирования. Закрываем PowerQuery и получаем следующую таблицу:


Отлично! Создав столбец “Окон свободно”, мы освободились от подсчета событий и видим возможность бронирования.

2. Создание событий в Outlook

Теперь нам необходимо написать скрипт на VBA для создания событий в Outlook. Для этого переходим во вкладку “Разработчик” в Excel и открываем VisualBasic:


В открывшемся окне выбираем рабочий лист, где находится итоговая таблица по событиям:


Запускать код мы будем, используя двойной клик на строки столбца «Доступность бронирования», и при условии, что статус бронирования «Забронировать»:


Для работы с Outlook мы будем использовать функцию GetObject("Outlook.Application"). GetObject — это функция для приложений VBA. Она используется для прикрепления к запущенным объектам. Более подробно с синтаксисом функции можно ознакомиться в документации Microsoft.
Для соблюдения корпоративного стиля код ищет предыдущее приглашение и копирует из него тело письма. Далее создается новое приглашение, и в него заносится вся необходимая информация.

Протестируем. Открываем файл, ищем строку с датой, которая нас интересует, и двойным кликом на статус бронирования запускаем скрипт:


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

3. Обновление данных

Чтобы при открытии книги происходило обновление данных, сохраним скрипт в саму книгу:


Кроме того, отключим фоновое обновление в свойствах подключения таблицы:


Подведем итоги

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

Конечно, в идеале можно было доработать нашу платформу обучения и полностью автоматизировать процесс бронирования. Но скрипты VBA тем и хороши, что могут заметно упростить жизнь без разработки и изменения существующих систем. Они пригодятся там, где скрипт пишется за несколько часов, а на полноценную автоматизацию и доработку существующих решений нужны недели или месяцы.

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

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

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