Как сделать макрос в outlook
Простые шаблоны писем в MS Outlook VBA
Небольшой рецепт на MS VB для сисадминов, которые хотят упростить жизнь сотрудникам.
Задача: девочка на reception периодически отправляет официальные анонсы всей компании. При этом дизайн, нарисованный дизайнером есть, а процесс отправки находится в состоянии вплоть до «отыскать старое письмо в отправленных, нажать переслать всем, отредактировать текст и тему письма, отправить».
Есть два способа:
Шаблоны — подойдет для простых вариантов, когда все поля статичны
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 с помощью VBA на примере создания массовой рассылки писем
В этой статье я бы хотел поделиться опытом автоматизации офисной, рутинной задачи по отправке сообщений группе клиентов.
Итак, собственно, в чем вопрос: необходимо отправить электронные письма с вложением нескольким десяткам клиентам. При этом в поле получателя должен быть только один адрес, т.е. клиенты друг о друге не должны знать. Кроме того, не допускается установка дополнительного программного обеспечения, типа MaxBulk Mailer и ему подобного. В нашем распоряжении есть только Microsoft Office, а в данном конкретном случае — Microsoft Office 2013.
Я описываю, на мой взгляд, самый вариант – без применения шаблонов, черновиков и форматирования. Для наших целей потребуется Outlook (переходим в редактор VBA и добавляем модуль, еще включаем «Microsoft Excel 15.0 Object Library» в Tools > References), текстовый файл со списком адресатов по принципу «одна строка-один адрес», текстовый файл с телом письма и файлы, которые будем отправлять в качестве вложения.
Общий алгоритм таков: указываем данные для полей и генерируем письма, перебирая в цикле получателей.
Сразу отмечу, что данный пример не является неким доведенным до совершенства кодом, работающим с максимальной эффективностью при минимальных размерах. Но он работает и справляется с заявленным функционалом. Собственно, мне было просто лень отправлять вручную несколько десятков писем и я написал эту программу, а потом решил ей поделиться. Если кому-то интересно, тот может улучшать код сколько душе угодно.
VBA, по умолчанию, не требует четкого объявления переменных и их типов. В принципе, можно вообще обойтись без этого. Поэтому некоторые переменные в «эпизодических ролях» не описаны в конструкции с Dim.
Итак, сначала запрашиваем тему письма с реализацией проверки на отмену действия.
Теперь очередь за файлами с адресами и текстом письма. Вот здесь возник нюанс. Как вызвать диалог выбора файла? О жестком прописывании пути я не хочу и думать. Так что приходится что-то придумывать. Многими используемый вариант с Application.GetOpenFilename не пройдет, так как в Outlook нет такого метода. Использовать API пробовал. Вариант с «Private Declare PtrSafe Function GetOpenFileName Lib „comdlg32.dll“…» не сработал (PtrSafe из-за того, что система Win7, х64). Ошибок не выдавал, но при вызове ничего не появлялось. Решения в Интернете не нашел. Если кто подскажет решение – буду благодарен. Таким образом, пришлось пойти в обход с применением объекта Excel.Application.
Каждый раз я создавал и удалял объект fd из-за того, что это сделать проще, чем заниматься его чисткой перед последующим вызовом.
Для получения данных из текстовых файлов пришлось использовать пару дополнительных функций. Вызываются они таким образом:
С целью отладки я вставил такой код
‘Контроль за данными
Как видно, он сейчас закомментирован, но позволяет понять где что лежит.
Теперь небольшая по размеру, но самая важная часть – генерация писем.
Включение и отключение макросов в файлах Office
Макрос представляет собой набор команд, с помощью которых можно автоматизировать выполнение повторяющейся задачи. В этой статье описаны риски, связанные с использованием макросов, и приведены инструкции по включению и отключению макросов в центре управления безопасностью.
Предупреждение: Никогда не в enable macros in an Office file unless you’re sure what those macros do. Неожиданные макросы могут представлять серьезную угрозу безопасности. Для этого не нужно, чтобы макрос мог видеть или редактировать файл. только в том случае, если вам нужны функции, предоставляемые макросом.
Сведения о создании макросов см. в статье Краткое руководство: создание макроса.
Если вы ищете сведения об использовании макроса на компьютере с Windows S, см. «Блокировать подозрительные макросы» в Office в Windows 10 S.
Макросы служат для автоматизации часто выполняемых задач, что позволяет сэкономить время за счет сокращения объема работы с клавиатурой и мышью. Многие из них созданы с использованием языка Visual Basic для приложений (VBA). Однако некоторые макросы представляют угрозу безопасности. Макрос часто используется злоумышленниками для тихой установки вредоносных программ, например вирусов, на компьютере или в сети организации.
Включение макросов при появлении панели сообщений
При открытии файла, содержащего макросы, появляется желтая панель сообщений со значком щита и кнопкой Включить содержимое. Если известно, что макрос поступил из надежного источника, воспользуйтесь приведенными ниже инструкциями.
В области Панель сообщений нажмите кнопку Включить содержимое.
Файл откроется и будет надежным документом.
На рисунке ниже показана панель сообщений, когда в файле есть макросы.
Включить макрос только для текущего сеанса
Выполнив приведенные ниже инструкции, можно включить макросы на то время, пока открыт файл. Если закрыть файл и открыть его снова, предупреждение появится опять.
Откройте вкладку Файл.
В области Предупреждение системы безопасности нажмите кнопку Включить содержимое.
В диалоговом окне Параметры безопасности Microsoft Office выберите команду Включить содержимое для этого сеанса для каждого макроса.
Изменение параметров макросов в центре управления безопасностью
Параметры макросов доступны в центре управления безопасностью. Однако администратор организации может изменить настройки по умолчанию, чтобы запретить изменение каких-либо параметров.
Важно: При изменении параметров макроса в центре управления доверием они изменяются только для используемого в данный момент программы Office. Параметры макроса не меняются во всех программах Office.
Откройте вкладку Файл.
Затем выберите пункты Центр управления безопасностью и Параметры центра управления безопасностью.
В центре управления безопасностью щелкните элемент Параметры макросов.
Выберите нужные вам решения и нажмите кнопку «ОК».
Примечание: Параметры в Excel немного отличаются, поэтому мы будем звонить на них по мере их вызова.
Отключить все макросы без уведомления. Этот параметр отключает макросы и связанные с ними оповещения безопасности.
В Excel этот параметр отключение макроса VBA без уведомления и только для макроса VBA.
Отключить все макросы с уведомлением. Этот параметр отключает макросы без отключения оповещений системы безопасности, которые будут появляться при необходимости. Так вы можете включать макросы, когда это требуется.
В Excel этот параметр является отключением макроса VBA с уведомлением и применяется только к макросам VBA.
Отключить все макросы кроме макросов с цифровой подписью Макрос отключается, а при этом отображаются оповещения системы безопасности. Однако если макрос подписан надежным издателем, он просто запускается. Если макрос подписан издателем, которому вы еще не доверяете, вы можете включить его и сделать издателя надежным.
В Excel этот параметр отключен, кроме макроса с цифровой подписью, и применяется только к макросам VBA.
Включить все макросы (не рекомендуется, советуем запускать опасное код). Все макрос будет запускаться без подтверждения. Компьютер становится уязвимым для потенциально опасных программ.
В Excel этот параметр относится только к макросам VBA (не рекомендуется, советуем запускать опасной код), и он применяется только к макросам VBA.
Excel также есть контрольныйExcel включить макрос Excel 4.0при включенном макросах VBA. Если этот параметр установить, все параметры макроса VBA будут также применяться к макросам Excel 4.0 (XLM).
Если этот снимок не был выбран, макрос XLM отключется без уведомления.
Доверять доступ к объектной модели проектов VBA Отопустить или разрешить программный доступ к объектной модели Visual Basic для приложений (VBA) из клиента автоматизации. Этот параметр безопасности для кода, написанного для автоматизации программ Office и работы со средой VBA и объектной моделью. Этот параметр настраивается как для каждого пользователя, так и для каждого приложения и по умолчанию не позволяет несанкционированно получать доступ, препятствуя построению потенциально опасных кодов самопроизводения. Чтобы клиенты автоматизации получили доступ к объектной модели VBA, пользователь, работающий с кодом, должен предоставить доступ. Чтобы включить доступ, выберите его.
Примечание: В Microsoft Publisher и Microsoft Access параметр Доверять доступ к объектной модели проектов VBA отсутствует.
Автоматизация Outlook из приложения Visual Basic Automating Outlook from a Visual Basic Application
Так как Microsoft Outlook поддерживает автоматизацию, вы можете управлять приложением Outlook из любой программы, созданной с помощью Microsoft Visual Basic. Because Microsoft Outlook supports Automation, you can control Outlook from any program that is written with Microsoft Visual Basic. Автоматизация обеспечивает для одного приложения стандартный способ доступа к объектам, методам, свойствам и событиям другого приложения, поддерживающего автоматизацию. Automation provides a standard method for one application to access the objects, methods, properties, and events of other applications that support Automation.
Объектная модель Outlook предоставляет все функциональные возможности, необходимые для работы с данными, которые хранятся в папках Outlook, а также обеспечивает возможность управления разными аспектами пользовательского интерфейса Outlook. The Outlook object model provides all of the functionality necessary to manipulate data that is stored in Outlook folders, and it provides the ability to control many aspects of the Outlook user interface (UI).
Чтобы использовать раннее связывание, сначала нужно указать ссылку на библиотеку объектов Outlook. To use early binding, you first need to set a reference to the Outlook object library. Используйте команду «Справка» в меню «Сервис» Visual Basic для приложений (VBA), чтобы задать ссылку на библиотеку объектов Microsoft Outlook XX. x, где XX. x представляет версию Outlook, с которой вы работаете. Use the Reference command on the Visual Basic for Applications (VBA) Tools menu to set a reference to Microsoft Outlook xx.x Object Library, where xx.x represents the version of Outlook that you are working with. Затем можно использовать указанный ниже синтаксис, чтобы начать сеанс Outlook. You can then use the following syntax to start an Outlook session.
После настройки объектной переменной для связи с папкой, содержащей нужные для работы элементы, используйте соответствующий код для завершения задачи, как показано в приведенном ниже примере. Once you have set an object variable to reference the folder that contains the items you wish to work with, you use appropriate code to accomplish your task, as shown in the following example.
Внимание! Этот новый экземпляр Outlook не является доверенным и может инициировать защиту объектной модели. Caution This new instance of Outlook is not trusted and can trigger the object model guard.
Поддержка и обратная связь Support and feedback
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Назначение макроса кнопке
С помощью кнопки (управления формы) можно запускать макрос, который выполняет действие при нажатии кнопки. Например, таким образом можно автоматизировать печать листа, фильтрацию данных либо расчеты.
После создания макроса егоможно назначить кнопке, нажатой для запуска макроса. Макрос можно назначить кнопке на панели быстрого доступа или кнопке в личной группе на ленте.
Если вы хотите, чтобы кнопка макроса была доступна в других книгах, назначьте ее макросу, созданному в личной книге.
Добавление кнопки макроса на панель быстрого доступа
Откройте вкладку Файл и выберите пункт Параметры, а затем — категорию Панель быстрого доступа.
В списке «Выбрать команды» выберите пункт «Макрос».
Выберите макрос, для который нужно назначить кнопку.
Нажмите кнопку «Добавить», чтобы переместить макрос в список кнопок на панели быстрого доступа.
Чтобы заменить значок макроса по умолчанию другой кнопкой, нажмите кнопку «Изменить».
В области «Символ»выберите значок кнопки для макроса.
Чтобы использовать более дружее имя для кнопки, введите нужное имя в поле «Отображаемом имени».
Вы можете ввести пробел в имя кнопки.
Дважды нажмите кнопку ОК.
Новая кнопка появится на панели быстрого доступа, где ее можно нажать, чтобы запустить макрос.
Совет: При этом кнопки,которые вы назначаете макросам в личной книге, будут доступны во всех открытых книгах.
Добавление кнопки макроса в группу на ленте
Щелкните Файл > Параметры > Настроить ленту.
В окне «Настройка ленты»в списке «Основные вкладки» проверьте,не был ли он еще не проверен, в поле «Разработчик».
Выберите вкладку, на которой вы хотите добавить свою группу.
Например, выберите «Главная»,чтобы добавить группу на вкладку «Главная».
Выберите «Новая группа».
При этом новая группа (настраиваемая) будет добавлена на вкладку, которую вы выбрали.
Чтобы использовать более понятное имя для новой группы, нажмите кнопку «Переименовать», введите нужное имя в поле «Отображаемого имени» и нажмите кнопку «ОК».
Вы можете ввести в имя пробел. Например, введите «Мои макросы».
Чтобы добавить макрос в группу, в списке «Выбрать команды из списка» выберите пункт «Макрос».
Выберите макрос, который вы хотите добавить в новую группу, и нажмите кнопку «Добавить». Макрос будет добавлен в группу «Мои макрос».
Чтобы использовать более дружее имя, нажмите кнопку «Переименовать» и введите нужное имя в поле «Отображаемого имени».
Вы можете ввести в имя пробел.
В области «Символ»выберите значок кнопки для макроса.
Дважды нажмите кнопку ОК.
Новая группа появится на вкладке, где можно нажать кнопку, чтобы запустить макрос.
Совет: При этом кнопки,которые вы назначаете макросам в личной книге, будут доступны во всех открытых книгах.
Более новые версии
На вкладке Разработчик в группе Элементы управления щелкните Кнопка.
Если вкладка «Разработчик» недоступна:
Перейдите в > Excel. > ленту & панель инструментов.
В разделе «Настройка ленты» в разделе «Основныевкладки» проверьте параметр «Разработчик» и нажмите кнопку «ОК».
Щелкните на листе место, где должен быть расположен левый верхний угол кнопки.
В диалоговом окне Назначение макроса щелкните имя макроса, который вы хотите назначить кнопке, и нажмите ОК.
Чтобы изменить размер кнопки, перетащите маркеры.
Чтобы задать свойства кнопки, щелкните ее, нажав клавишу CONTROL, или щелкните ее правой кнопкой мыши, а затем выберите «Формат объекта».
Excel 2011 для Mac
На вкладке Разработчик в группе Элементы управления формы щелкните Кнопка.
Если вкладка «Разработчик» недоступна:
В правой части ленты нажмите кнопку и выберите пункт Параметры ленты.
В разделе Настройки установите флажок Разработчик.
Щелкните на листе место, где должен быть расположен левый верхний угол кнопки.
В диалоговом окне Назначение макроса щелкните имя макроса, который вы хотите назначить кнопке, и нажмите ОК.
Чтобы задать свойства кнопки, щелкните ее, нажав клавишу CONTROL, или щелкните ее правой кнопкой мыши, а затем выберите «Формат объекта».