Данный материал является переводом оригинальной статьи "EasyTweaks : How to write useful macros in Outlook 2016 and 2019 messages".
В Microsoft Office мы используем возможности Visual Basic for Application (VBA) для создания пользовательских программ, которые расширяют базовую функциональность Office и помогают экономить время за счет автоматизации повторяющихся задач. Мы называем эти небольшие программы VBA-макросами.
В этом руководстве мы хотели бы представить примеры разработки макросов для Outlook. Мы сосредоточимся на изучении основ Outlook VBA для начинающих, научимся создавать простые макросы и рассмотрим некоторые полезные идеи использования макросов. После изучения этого руководства вы сможете разрабатывать и запускать простые макросы VBA для Outlook.
- Сначала основы: мы узнаем, как вставить и сохранить простой настраиваемый макрос VBA в активный сеанс Outlook.
- Затем мы настроим среду разработки макросов.
- Мы рассмотрим самые простые примеры Outlook VBA. Это поможет вам понять основы разработки макросов и позволит писать простые макросы.
- Затем мы определим ярлык для нашего макроса на панели быстрого доступа. Это позволит нам легко запускать макрос.
- И закончим, включив макросы Outlook и обработав их настройки безопасности, чтобы гарантировать, что код действительно будет запускаться при появлении запроса на наших компьютерах.
Можно ли записать макрос в Outlook?
В отличие от других приложений Office, Outlook не предлагает простого Macro recorder для захвата действий пользователя и автогенерации создаваемого кода VBA в фоне. Поэтому, если мы хотим добавить в Outlook свои собственные функции, нам нужно научиться писать простые программы VBA и включать их в сеанс Outlook.
Если вам интересно узнать, как на самом деле работает средство записи макросов Office, рекомендуем изучить MS Word Macros и Excel VBA Macro tutorials.
Написание макроса VBA в Outlook
- Прежде всего откройте Microsoft Outlook.
- Теперь нажмите Alt + F11.
- Откроется интегрированная среда разработки (IDE) разработчика VBA.
- Разверните дерево проекта до узла ThisOutlookSession.
- Щелкните правой кнопкой мыши ThisOutlookSession и нажмите "Вставить".
- Теперь вы вставите модуль Visual Basic. Для этого выберите Module.
- Вставьте свой код VBA в окно модуля.
- Нажмите "File", затем выберите "Save".
- Далее, закройте среду разработчика. Это вернет вас в пользовательский интерфейс Outlook.
Прочтите несколько простых примеров кода, которые помогут вам начать работу с VBA. Никогда неосознанно не копируйте код VBA из неизвестных ресурсов!
Как настроить вкладку разработчика в Outlook?
Если вы часто разрабатываете макросы Outlook, вы можете настроить среду разработки Office. Звучит фантастически, не правда ли? На самом деле это довольно простая процедура. Читайте подробности:
Откройте Outlook, правой кнопкой мыши щелкните на верхней части Ленты (Ribbon) и выберите Customize the Ribbon.
Отметьте пункт Developer и нажмите OK.
Теперь вы найдете меню Developer на Ленте.
Полезные примеры Outlook VBA
Создание электронного сообщения
Этот простой фрагмент кода программно создает новый элемент сообщения электронной почты..
Сценарий начинается с создания почтового элемента Outlook, затем он устанавливает поля "Кому" (To), "Тема" (Subject), "Основной текст" (Body) и "Копия" (CC). Наконец, он отображает сообщение в Outlook, чтобы вы могли просмотреть и отправить его вручную.
Public Sub CreateMail()
Dim MyEmail As MailItem
' Create a new Outlook message item programatically
Set MyEmail = Application.CreateItem(olMailItem)
'Set your new message to, subject, body text and cc fields.
With MyEmail
'Кому
.To = "f1-4-u@mail.ru"
'Тема
.Subject = "Insert your message subject here"
'Текст
.Body = "Insert your email text body here"
'Копия
.CC = "f1-4-u@yandex.ru"
End With
MyEmail.Display
End Sub
Вы можете использовать предопределенные шаблоны Outlook при определении новых писем с помощью VBA. Для этого вам нужно использовать метод CreateItemFromTemplate и указать расположение файла шаблона Outlook (*.oft).
Отправка электронного письма программно
Если вы хотите, чтобы Outlook отправлял только что созданное электронное письмо автоматически, вы можете добавить следующую строку в код, опубликованный выше. Вставьте следующую строку прямо перед оператором End Sub предыдущего фрагмента:
MyEmail.Send
Прикрепление файла к электронному письму
Во многих случаях вы хотели бы автоматизировать отправку электронного письма с прикрепленным к нему файлом. Это может быть документ Word, электронная таблица Excel, презентация PowerPoint, документы PDF и т.д.
Если вы хотите программно отправить электронное письмо с вложениями, используйте такой код:
Public Sub CreateMailWAttach()
' VBA Code
Dim MyEmail As MailItem
' Create a new Outlook message item programatically
Set MyEmail = Application.CreateItem(olMailItem) 'Define your attachment folder path and file name - modify this part as needed
Dim AttachFolder, AttachFile As String
AttachFolder = "C:\temp\"
AttachFile = "Dummy.zip" 'Set your new message to, subject, body text and cc fields.
With MyEmail .To = "f1-4-u@mail.ru; f1-4-u@yandex.ru"
.Subject = "This is your message subject"
.Body = "Insert your email text body here"
.CC = "cc@my_server.com"
.Attachments.Add AttachFolder & AttachFile End With MyEmail.Display
' MyEmail.Send
End Sub
Убедитесь, что вы указали правильный путь и имя файла вложения во фрагменте.
В этом примере установлены несколько получателей для электронного письма, при необходимости измените настройки.
Создание задачи через VBA
Следующий фрагмент кода создает задачу Outlook, назначает ее другому лицу и устанавливает тему задачи и основной текст.
Public Sub CreateTask() Dim MyTask As TaskItem
' Create a new Outlook task
Set MyTask = Application.CreateItem(olTaskItem) 'Set your new task recipients and information fields
With MyTask
.Assign
.Recipients.Add "taskrecipient@my_server.com"
.Subject = "This is your task subject"
.Body = "Insert a thorough explanation of your task here." End With MyTask.Display End Sub
Сохранение в формате HTML
Некоторые читатели спрашивали, как автоматизировать сохранение писем в HTML. Приведенный ниже код выполняет именно это.
Public Sub SaveAsHTML()
On Error Resume Next
Dim MyWindow As Outlook.Inspector
Dim MyItem As MailItem
Dim FilePath As String
FilePath = Environ("HOMEPATH") & "\Documents\" & "\"
Dim ItemName As String
Set MyWindow = Application.ActiveInspector
If TypeName(MyWindow) = "Nothing" Then
MsgBox ("Kindly open an email to save")
Else
Set MyItem = MyWindow.CurrentItem
ItemName = MyItem.Subject ' File name will be identical to the message subject!
With MyItem
.SaveAs FilePath & ItemName & ".html", olHTML
End With
End If
End Sub
Убедитесь, что вы запускаете этот код только в электронных письмах, открытых в Outlook (не в представлении "Входящие"/"Проводник")!
Вопросы по макросам Outlook
Где в Outlook хранятся макросы?
Вы можете не знать, где именно хранится используемый вами макрос. В отличие от, например, Excel, который позволяет хранить макросы в файле personal.xlb или в определенных электронных таблицах, все макросы Microsoft Outlook хранятся в одном глобальном файле, который называется VBAProject.otm. Файл можно найти по адресу:
C:\users\<your_user_name>\AppData\Roaming\Microsoft\Outlook.
Кнопка быстрого доступа для макросов Outlook
Наш следующий шаг - вставить небольшую кнопку быстрого доступа, которая позволит нам легко запустить макрос. Для простоты вставим эту кнопку на панель быстрого доступа.
Откройте Microsoft Outlook, если ещё не открыли.
Щёлкните правой кнопкой мыши на Ленте Outlook и выберите пункт Customize the Quick Access Toolbar.
Примечание: Аналогичную процедуру можно использовать для размещения значка на самой ленте, а не на панели быстрого доступа.
Нажмите Choose commands from комбо-бокс и выберите Macros.
Выберите макрос, который вы создали и нажмите Add.
Нажмите Modify для выбора иконки для вашей кнопки Панели Быстрого Доступа.
По завершении, нажмите OK.
Как разрешить выполнение макросов в Outlook?
Этот шаг не является обязательным, и его следует выполнять только в том случае, если вы получаете сообщение об ошибке при запуске вновь созданного макроса.
Сперва, нужно разрешить Outlook запускать наш макрос VBA. По умолчанию Microsoft Office отключает макросы и не разрешает их выполнение. Поэтому нам нужно будет определить надлежащую безопасность макросов, чтобы разрешить запуск вашего настраиваемого макроса Outlook.
В Outlook 2016/2019, щелкните Developer на Ленте и выберите Macro security.
Выберите Настройки безопасности макросов.
- Для Outlook 2016 выберите вариант "Notifications for only digitally signed macros, all other disabled или Notifications for all macros".
- Для Outlook 2019 выберите вариант "Disable All Macros with Notification". Это задействует появление предупреждающего сообщения, требующего одобрения пользователя перед запуском макроса.
После настройки безопасности макросов, нажмите OK.
Ваши текущие настройки безопасности могут препятствовать запуску макросов в Outlook. Вот руководство о том, как действовать, если макросы отключены в вашем проекте Макросов Outlook.
Как использовать макрос Outlook?
И последнее, но не менее важное: теперь пора запустить только что созданный макрос.
Перейдите на панель быстрого доступа (верхняя левая часть экрана - немного выше основного меню).
Нажмите значок, который вы назначили для своего макроса.
Вуаля, вы только что завершили и запустили свой (первый) макрос Outlook VBA!
Здравствуйте! А вы знаете, как назначить выполнение макроса по сочетанию клавиш? В идеале на кнопку мыши, но полагаю, это совсем сложная задача.
Нажмите Alt+F8, а затем выберите нужный макрос.
Если вы хотите запустить макрос, нажав сочетание клавиш на клавиатуре, введите букву в поле сочетание клавиш. Вы можете использовать CTRL+ letter (для строчных букв) или CTRL+SHIFT+ letter (для прописных букв), где letter - это любая буквенная клавиша на клавиатуре. Сочетание клавиш не может использовать число или специальный символ, такой как @ или #.
Примечание: Сочетание клавиш переопределит любые эквивалентные сочетания клавиш Microsoft Excel по умолчанию, пока открыта книга, содержащая макрос.
Если вы хотите включить описание макроса, введите его в поле Описание.
Нажмите OK.
Для мыши с программируемыми кнопками, надо смотреть документацию по ней, если возможно запрограммировать на какую-либо кнопку сочетание клавиш.
Подскажите, как сделать задержку исполнения макроса?