- •Предисловие
- •1. Основы программирования в Microsoft Office
- •1.2. Что такое язык VBA
- •1.3. Макрорекордер: быстрое создание макросов
- •1.4. Четыре способа запуска макроса
- •2.1. Общие сведения
- •2.3.1. Как открыть редактор кода и как он устроен
- •2.3.2. Список объектов и список событий
- •2.3.3. Закладки и разделение окна редактирования
- •2.3.4. Как редактор помогает писать код
- •2.4. Работа со справкой
- •3. Синтаксис и программные конструкции VBA
- •3.1. Основы синтаксиса
- •3.2. Операторы
- •3.3. Переменные и типы данных
- •3.4. Константы
- •3.5. Операторы условного и безусловного перехода
- •3.5.2. Оператор Select Case
- •3.5.3. Оператор GoTo
- •3.6. Работа с циклами
- •3.7. Массивы
- •3.8. Процедуры и функции
- •3.8.1. Виды процедур
- •3.8.2. Область видимости процедур
- •3.8.3. Объявление процедур
- •3.8.4. Передача параметров
- •3.8.5. Вызов и завершение работы процедур
- •3.9. Встроенные функции языка VBA
- •3.9.1. Что такое встроенные функции
- •3.9.2. Функции преобразования и проверки типов данных
- •3.9.3. Строковые функции
- •3.9.4. Функции для работы с числовыми значениями
- •3.9.5. Функции для работы с датой и временем
- •3.9.6. Функции для форматирования данных
- •3.9.7. Функции для организации взаимодействия с пользователем
- •3.9.9. Функции для работы с массивами
- •3.9.10. Функции для работы с файловой системой
- •3.9.11. Другие функции VBA
- •4. Работа с объектами и объектные модели
- •4.1. Что такое классы и объекты
- •4.2. Создание и удаление объектов
- •4.3. Методы объекта
- •4.4. Свойства объекта
- •4.6. Просмотр объектов
- •4.7. Объектные модели
- •5. Формы, элементы управления и события
- •5.1. Для чего нужны формы
- •5.2. Создание форм и самые важные свойства и методы форм
- •5.3. Элементы управления
- •5.3.1. Что такое элемент управления
- •5.3.2. Элемент управления Label
- •5.3.3. Элемент управления TextBox
- •5.3.4. Элемент управления ComboBox
- •5.3.5. Элемент управления ListBox
- •5.3.7. Элементы управления OptionButton и Frame
- •5.3.8. Элемент управления CommandButton
- •5.3.9. Элементы управления ScrollBar и SpinButton
- •5.3.10. Элементы управления TabStrip и MultiPage
- •5.3.11. Элемент управления Image
- •5.3.12. Применение дополнительных элементов управления
- •6. Отладка и обработка ошибок в программе
- •6.1. Типы ошибок
- •6.2.1. Тестирование
- •6.2.2. Переход в режим паузы
- •6.2.3. Действия в режиме паузы
- •6.2.4. Окно Immediate
- •6.2.5. Окно Locals
- •6.2.6. Окно Watches
- •6.3. Перехват и обработка ошибок времени выполнения
- •7. Работа с помощником
- •8. Работа с панелями инструментов и меню
- •9.1. Зачем нужно работать с базами данных
- •9.2. Что такое ADO
- •9.3. Объект Connection и коллекция Errors
- •9.4. Подключение к таблице на листе Excel
- •9.5. Объект Recordset и коллекция Fields
- •9.5.1. Открытие Recordset
- •9.5.3. Перемещение по Recordset
- •9.5.4. Коллекция Fields и объекты Field
- •9.5.5. Сортировка и фильтрация данных
- •9.5.6. Изменение записей на источнике при помощи объекта Recordset
- •9.5.7. Прочие свойства и методы объекта Recordset
- •10. Программирование в Word
- •10.1. Зачем программировать в Word
- •10.3. Объект Application
- •10.3.1. Как работать с объектом Application
- •10.3.2. Свойства, методы и события объекта Application
- •10.4. Коллекция Documents и объекты Document
- •10.4.1. Как работать с коллекцией Documents
- •10.4.2. Свойства и методы коллекции Documents
- •10.4.3. Работа с объектом Document, его свойства и методы
- •10.5. Объекты Selection, Range и Bookmark
- •10.5.1. Работа с объектом Selection
- •10.5.2. Свойства и методы объекта Selection
- •10.5.3. Работа с объектом Range, его свойства и методы
- •10.5.4. Объект Bookmark
- •10.6. Другие объекты Word
- •10.6.1. Коллекция AddIns и объекты AddIn
- •10.6.2. Объект AutoCorrect
- •10.6.3. Коллекция Languages и объект Language
- •10.6.4. Объект Options
- •10.6.5. Объекты Find и Replacement
- •10.6.6. Объекты Font и ParagraphFormat
- •10.6.7. Объект PageSetup
- •10.6.8. Объекты Table, Column, Row и Cell
- •10.6.9. Объект System
- •10.6.10. Коллекция Tasks и объект Task
- •10.6.11. Коллекция Windows и объект Window
- •11. Программирование в Excel
- •11.1. Зачем программировать в Excel
- •11.2. Объект Application
- •11.3. Свойства и методы объекта Application
- •11.4. Коллекция Workbooks и объект Workbook, их свойства и методы
- •11.5. Коллекция Sheets и объект Worksheet, их свойства и методы
- •11.6. Объект Range, его свойства и методы
- •11.7. Коллекция QueryTables и объект QueryTable
- •11.9. Работа с диаграммами (объект Chart)
- •11.10. Другие объекты Excel
- •12. Программирование в Access
- •12.1. отличительные особенности создания приложений в Access
- •12.2. Основные этапы создания приложений в Access
- •12.4. Макрокоманды и объект DoCmd
- •12.5. Работа с формами Access из VBA (объект Form)
- •12.6. Свойства, методы и события форм
- •12.7. Работа с отчетами (объект Report)
- •13. Программирование в Outlook
- •13.1. Зачем программировать в Outlook
- •13.2. Некоторые особенности программирования в Outlook
- •13.4. Объект Namespace
- •13.5. Коллекция Folders и объект MAPIFolder
- •13.7. Другие объекты Outlook
- •14. Программирование в PowerPoint
- •15. Программирование в Project
- •15.1. Основы программирования в Project Professional. Объект Application
ГЛАВА 13
Программирование в Outlook
13.1. Зачем программировать в Outlook
Outlook (вместе с его урезанной версией, которая называется Outlook Express) — самая распространенная программа для работы с электронной почтой. Однако его важность заключается не только в возможности отправки и получения электронных сообщений. На предприятиях очень большую ценность представляют его дополнительные возможности, которые помогают делать то, что Microsoft называет задачами персонального информационного менеджера (Personal Information Manager, PIM).
Первая такая задача — это работа с календарем, т. е. организация времени пользователя. Календарь тесно интегрирован с другими элементами Outlook (такими как Контакт и Задача), а также с внешними приложениями (например, Microsoft Project). На предприятиях часто используется назначение задач пользователям, когда такие задачи автоматически появляются как элементы Календаря. Если пользователь самостоятельно заносит свои задачи в Outlook, то можно (если почтовый ящик пользователя лежит на сервере Exchange Server) предоставить доступ к календарю этого пользователя его менеджерам. Менеджеры смогут видеть, какие задания есть в настоящий момент у этого пользователя, что позволит избежать ситуаций, когда новое задание выдается сотруднику, уже занятому важной работой.
У Календаря есть еще одна замечательная возможность: если вы создадите из Outlook на сервере Exchange общую папку с элементами типа Календарь, в вашем распоряжении будет готовое приложение для планирования совместного доступа к ресурсам (комнатам для переговоров, проекторам, разному оборудованию и т. п.). Предположим, например, что в вашей организации принято правило: все личное общение с клиентами должны производиться только в комнате для переговоров, а количество этих комнат ограничено.
Программирование в Outlook |
325 |
Вполне может произойти ситуация, когда клиент придет, а все комнаты будут заняты. Чтобы этого не произошло, используется общая папка с элементами управления типа Календарь. В процессе общения с клиентом пользователь открывает из Outlook эту общую папку и смотрит, в какое время комната свободна. Согласовав с клиентом время визита, он создает в этой общей папке элемент типа Встреча, и уже другие сотрудники смогут увидеть, что в это время комната для переговоров занята.
Конечно же, на практике как синхронизация календаря с другими источниками, так и использование общих календарей часто требует добавления функциональности средствами программирования.
Вторая задача — это работа с контактами. Контакты Outlook — это наиболее распространенный и стандартный формат адресной книги. В последнее время особенно важным стало то, что контакты из адресной книги Outlook можно очень легко и просто синхронизировать с сотовыми телефонами, карманными компьютерами и прочими аналогичными устройствами. На предприятиях часто используется, например, общий список контактов для подразделения в виде элементов Контакт, которые хранятся в общей папке Exchange Server (адресная или телефонная книга самой организации также обычно ведется в формате адресной книги Exchange Server и доступна через Outlook). Ситуаций, когда вам нужно программным образом создать контакты (например, на основе информации из базы данных), или синхронизировать их, или пройти циклом по всем контактами и изменить их в зависимости от какого-то условия, очень много.
Третья возможность — это работа с задачами и поручениями. Для масштабных проектов, конечно, лучше использовать специализированное программное обеспечение (например, Microsoft Project и Project Server), но для простых проектов, за которые ответственен один менеджер, задачи Outlook вполне подойдут. При помощи этого средства можно создавать задачи, назначать их другим лицам (поручения) с уведомлением их по электронной почте, отслеживать процент выполнения и т. п.
Четвертая задача — это работа с дневником. При помощи этого средства вы можете отслеживать работу с документами Office, обмен информацией при помощи Outlook и т. п. Дневник позволяет создать отчет о проделанной работе или вспомнить, в каком файле находится нужный документ за прошлый квартал, чтобы по его образцу сделать новый документ.
Есть еще работа с заметками — компьютерными аналогами маленьких листочков с напоминаниями, которыми некоторые любители обклеивают все вокруг себя.
Конечно же, перечисленными встроенными возможностями работа с Outlook не ограничивается. На связке Outlook—Exchange Server основана целая об-
326 |
Глава 13 |
ласть программирования, которая называется collaboration development —
разработка приложений коллективного использования. Основные задачи,
которые решаются при помощи приложений коллективного использования, — это сбор и автоматизированная обработка внутрикорпоративной информации.
Например, представим себе следующую задачу из реальной жизни: каждый банк должен в конце каждого месяца представлять в Центральный банк информацию об экономических нормативах. Чаще всего это выглядит так: сотрудник планово-экономического отдела, ответственный за сбор информации, в начале каждого месяца идет в бухгалтерию, чтобы получить информацию об остатках на требуемых счетах на конец прошлого месяца. Затем он отправляется в кредитный отдел, чтобы получить информацию о том, какие кредиты относятся к какой категории. После этого он руками формирует файл отчета требуемого формата. При использовании средств Outlook это могло бы выглядеть по-другому:
1.В начале месяца у сотрудника планово-экономического отдела в папке Входящие в Outlook автоматически появляется специальная форма для заполнения информации о нормативах.
2.Он нажимает кнопку Отправить в бухгалтерию на этой форме, и она отправляется ответственному сотруднику бухгалтерии (он может и автоматически получать информацию об остатках на счетах из программы Операционный день, если разработчик сможет это реализовать).
3.Сотрудник бухгалтерии, заполнив нужные поля, нажимает кнопку Дальше и форма с сохраненными данными идет в кредитный отдел.
4.Сотрудник кредитного отдела заполняет свои поля (поля, заполненные в бухгалтерии, при этом автоматически должны быть доступны только для чтения) и нажимает кнопку Дальше.
5.Форма со всеми необходимыми данными приходит к сотруднику плановоэкономического отдела, тот нажимает на ней кнопку Сформировать отчет, и формируется файл отчета в нужном формате, а форма с сохраненными значениями автоматически помещается в архив.
На любом предприятии задач по сбору внутрикорпоративной информации очень много. Можно привести в пример и отчеты о командировках, сбор информации из филиалов, формы, заполняемые продавцами (в офисе и в командировках), информацию инвентаризаций — этот перечень можно продолжать бесконечно. И, как показывает практика, самый удобный способ — это именно применение средств Outlook и Exchange Server. Большим плюсом здесь является то, что никаких внешних средств разработки использовать не нужно: Outlook — это еще и среда разработки. Чаще всего в подобных приложе-
Программирование в Outlook |
327 |
ниях используются формы Outlook — специальные шаблоны сообщений с элементами управления и программными возможностями, например, маршрутами прохождения (эти формы ни имеют никакого отношения к обычным формам VBA или формам Access). Создать такую форму и определить для нее необходимый программный код можно средствами самого Outlook: для этого достаточно в меню Сервис | Формы воспользоваться пунктом Конст-
руктор форм, выбрать нужную форму (например, Сообщение в Библиотеке стандартных форм) и нажать кнопку Открыть. Откроется окно дизайнера форм (рис. 13.1), в котором вы сможете изменять шаблон стандартного сообщения, как вам угодно: помещать новые элементы управления, привязывать к ним программный код (при помощи меню Форма | Просмотреть код) и т. п.
Рис. 13.1. Окно конструктора форм Outlook
Например, добавить код для нашей кнопки CommandButton1, которую мы поместили на форму, можно так:
1.В меню Форма выберите Просмотреть код (вместо этого можно воспользоваться кнопкой Просмотреть код на панели инструментов Конструк-
тор форм);
328 |
Глава 13 |
2. В окне редактора сценариев добавьте следующий код:
Function CommandButton1_Click()
MsgBox "Привет из формы Outlook"
End Function
К сожалению, автоматически сгенерировать событийную процедуру для кнопки не получится. Нет в нашем распоряжении и подсказок по свойствам и методам, и подсветки синтаксиса, и отладки, и многого другого.
3.Чтобы запустить кнопку на выполнение, воспользуйтесь командой Выполнить форму в меню Форма, а затем нажмите кнопку.
Как вы уже, наверное, догадались, это не совсем привычный нам VBA (и даже больше — это вообще другой язык программирования VBScript). Для форм Outlook предусмотрена своя собственная среда программирования, своя объектная и событийная модели. Как правило, работа с формами Outlook неотделима от работы с корпоративными возможностями Exchange Server: библиотеками форм, серверными скриптами, общими папками, маршрутизацией и т. п. Все это очень большая специальная тема, для рассмотрения которой потребуется отдельная толстая книга. По этой причине работу с формами Outlook и приложениями коллективного использования здесь мы рассматривать не будем. Скажем только, что хорошей отправной точкой для самостоятельного освоения этой темы может послужить файл официальной документации Microsoft, который по умолчанию находится в каталоге C:\Program Files\Microsoft Office\OFFICE11\1049\OLFM10.CHM, и сайт www.slipstick.com.
В этой главе мы сосредоточимся на работе в Outlook традиционными средствами VBA, при помощи стандартных модулей и форм VBA и в привычном редакторе кода.
Задач автоматизации, которые могут решаться средствами VBA, также очень много:
организация рассылки электронной почты по расписанию;
получение электронной почты и ее автоматизированная обработка (например, если сообщение пришло в стандартном формате, можно извлечь из него данные и поместить в базу данных), например, сбор данных из филиалов;
автоматизация работы с контактами, например, импорт контактов из базы данных или файла Excel в общую папку на сервере Exchange;
автоматическое создание или изменение записей в календаре; и многое-многое другое.
Работать с этими возможностями Outlook нам и предстоит научиться.