Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 Курс Информатика VBA(ЗО) / Книги / В.Д.Хорев - Самоучитель программирования на VBA в Microsoft Office

.pdf
Скачиваний:
2701
Добавлен:
31.05.2015
Размер:
21.66 Mб
Скачать

Глава 9

Программирование в Outlook: документооборот и электронная почта

Электронная почта в современном офисе

Сегодня Internet-технологии, особенно электронная почта, стали не экзотикой, а привычными и обыденными инструментами бизнеса. Постепенно электронная почта вытесняет факсимильную связь, все уверенней играя роль основного средства обмена информацией как внутри компании, так и за ее пределами. Помимо скорости и качества передачи информации, электронная почта обладает перед факсимильной связью еще одним неоспоримым преимуществом — она не требует для обмена информацией синхронизации действий принимающей и отправляющей сторон. Проще говоря, можно отправить электронную почту адресату, не заботясь о том, включен ли в данный момент его компьютер и находится ли он на своем рабочем месте.

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

Все это так, но возникает вопрос: “Неужели у электронной почты нет недостатков?”. Конечно, недостатки есть — они являются продолжением ее достоинств. Главный из них состоит в том, что со временем поток информации, получаемой и отправляемой по электронной почте, может стать неуправляемым. Если вдруг надо найти какой-то документ, то, как и в случае с другими электронными документами, на решение такой задачи могут уйти многие часы — придется просматривать десятки учетных записей, папок и хранящихся в них писем. Часто такую проблему решают просто, удаляя все ненужные сообщения. Однако это, во-первых, требует ручного управления потоками документов, а во-вторых, может привести к возникновению проблем из-за разных критериев степени важности информации, например, у секретаря и его шефа. Наконец, многие государственные учреждения и организации просто обязаны сохранять всю входящую и исходящую корреспонденцию, в том числе и электронную почту.

Где же выход? У читателя данной книги ответ напрашивается сам собой — конечно, в автоматизации документооборота, проходящего по электронной почте. Как нетрудно догадаться, компания Microsoft и здесь предлагает платформу для решения большинства возникающих в этой области задач, которая называется Outlook 2000 и VBA.

Постановка задачи

ООО “Универсал” старается идти в ногу с техническим прогрессом. Несколько лет назад руководство компании решило, что настала пора внедрять в работу Internet-технологии, в результате чего ООО “Универсал” подключилось к Internet и начало осваивать электронную почту и World Wide Web. После заключения успешного контракта с крупной немецкой компанией Gans Gmbh, чему немало способствовало наличие связи по электронной почте, руководство убедилось в правильности выбранного курса. Было принято решение о создании собственного Web-сайта, а также о подключении к Internet по выделенному каналу и установке собственного почтового сервера.

224 Глава 9. Программирование в Outlook: документооборот и электронная почта

Сотрудники ООО “Универсал” успешно освоили электронную почту и используют ее весьма интенсивно. При этом для удобства менеджеров и специалистов, работающих с клиентами на выезде, основным протоколом электронной почты выбран IMAP4, что позволяет хранить все сообщения на сервере. Рабочие места отдела продаж организованы таким образом, что позволяют менеджерам для работы с электронной почтой использовать любой свободный компьютер или же личный портативный компьютер. Однако руководство компании обеспокоено тем, что процесс получения и отправки почты выходит из-под контроля — ежедневно через каждую из нескольких десятков учетных записей поступают и отправляются десятки сообщений. В результате несколько важных заявок от привлекательных для компании заказчиков из-за болезни менеджера остались без внимания. (К счастью, репутация ООО “Универсал” настолько высока, что потенциальные заказчики оказались настойчивыми и вышли напрямую на руководство компании.)

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

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

Объектная модель Outlook 2000

Если с автоматизацией с помощью VBA в Excel вопросов практически не возникает, то для работы с Outlook 2000 необходимо немного ознакомится с некоторыми особенностями подходов, принятых компанией Microsoft для решения подобных задач в этой системе.

Прежде всего, необходимо отметить, что Outlook 2000 (сюрприз!) не поддерживает функции автоматической записи макросов. Чтобы в этом убедиться, достаточно открыть окно Outlook 2000 и выбрать команду Сервис | Макрос. Таким образом, для программирования на VBA необходимо хорошо прочесть документацию и другие источники информации, так как на “быстрое программирование”, которое сводится к записе и последующей модификации нужной последовательности команд, рассчитывать не приходится.

Второй нюанс заключается в том, что вопросы программирования на VBA в Outlook 2000 документированы поверхностно. По-видимому, это вызвано опасениями компании Microsoft, что их детище будут использовать для написания вирусов. Практика показывает, что “пытливые умы” такие препятствия не останавливают, а вот обычным программистам, занимающимся автоматизацией задач в Microsoft Office, столь странные ограничения доставляют немало лишних проблем.

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

см. также гл. 7 “В мире объектов MS Office”.

Итак, как уже отмечалось, в качестве клиента автоматизации удобнее использовать Excel, а Outlook применять в качестве сервера. Сам термин автоматизация в данном контексте означает технологию, которая позволяет двум независимым программным компонентам обмениваться друг с другом данными. Все приложения Microsoft Office могут выступать как в роли серверов (т.е. приложений, которые предоставляют услуги клиентам), так и в роли клиентов (т.е. приложений, которые пользуются услугами, предоставляемыми серверами автоматизации). В случае автоматизации обмена данными Word и Excel решение о том, кто будет играть роль сервера, а кто — клиента, как правило, несущественно. Однако при подключении к задачам автоматизации Outlook решение о распределении ролей становится важным. Если выбрать в качестве клиента Outlook, а в качестве сервера Excel, разработчик по указанным выше причинам теряет доступ к такому важному инструменту, как макрорекордер. Конечно, можно запустить экземпляр приложения Excel, и

Объектная модель Outlook 2000 225

записывать в нем фрагменты макросов, а затем переносить их в среду интегрированного редактора Visual Basic приложения Outlook Express, но зачем усложнять себе жизнь?

см. об использовании макрорекордера в разделе “Первый способ формирования счета (использование макрорекордера)” гл. 1.

Классы и объекты

Для того чтобы программировать работу с сервером автоматизации, особенно таким “закрытым”, как Outlook 2000, нужно хорошо понимать, в чем состоит различие между классами и объектами. Классы представляют собой описание типов объектов, которые сервер автоматизации может предоставить в распоряжение клиента. В определении класса описываются присущие ему свойства, методы, а также, в некоторых случаях, события, на которые может реагировать данный класс. Но при написании программного кода все операции выполняются не над классами, а над объектами, представляющими собой конкретные экземпляры реализации того или иного класса. Классы и объекты, в каком-то смысле, соотносятся друг с другом так же, как типы данных и переменные — в VBA имеется ограниченное количество предопределенных типов данных, но программист может создать сколь угодно много экземпляров переменных любого из этих типов. Необходимо отметить, что когда речь идет об объектной модели какого-нибудь приложения, это означает, что имеется в виду набор классов этого приложения. При написании же кода VBA программист имеет дело не с классами, а с реальными объектами.

Библиотеки типов

Все основные приложения Microsoft Office 2000 построены в виде компонентов COM. Это означает, что программист может получить информацию об их внутренней структуре, используя соответствующую библиотеку типов.

Библиотека типов — это своего рода база данных, в которой хранятся сведения об объектах, методах, свойствах и событиях, поддерживаемых приложением, которое играет роль сервера автоматизации. Именно с помощью библиотеки типов клиент автоматизации может получить нужную ему информацию для обращения к объектной модели сервера.

Библиотеки типов могут выполняться как в виде отдельных файлов с расширениями TLB или OLB, так и встраиваться непосредственно в программные файлы приложений, имеющие расшире-

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

Можно ли обойтись без использования библиотеки типов? Можно, но тогда для взаимодействия с объектами сервера придется каждый раз запускать соответствующее приложение (в данном случае — Outlook), а интерпретатор VBA не сможет проверять правильность использования синтаксиса при написании программного кода, использующего объекты сервера автоматизации. Кроме того, программист вынужден будет работать “вслепую”, так как у него не будет доступа к интерактивной справочной системе по объектной модели сервера автоматизации.

Как подключить к Excel библиотеку типов Outlook

1.Запустите Excel и сохраните новый рабочий лист в файле с именем Registrator.xls.

2.Откройте окно редактора Visual Basic командой Сервис | Макрос | Редактор Visual Basic.

3.В окне редактора Visual Basic выберите в меню Tools команду References.

4.Найдите в списке пункт Microsoft Outlook 9.0 Object Library и установите флажок напротив этого пункта (рис. 9.1).

5.Закройте диалоговое окно, щелкнув на кнопке OK.

226 Глава 9. Программирование в Outlook: документооборот и электронная почта

Рис. 9.1. Подключение нужных библиотек типов

см. также в гл. 2 раздел “Как задать ссылку на библиотеку объектов Word в среде MS Excel”, в гл. 3 раздел “Как задать ссылку на библиотеку объектов Excel в среде MS Word” и в гл. 6 раздел “Ссылка на библиотеку объектов MS Access”.

Подключение библиотеки типов дает возможность разработчику работать с объектами сервера автоматизации точно так же, как и с объектами программируемого им клиента. В частности, из интегрированной среды Microsoft Visual Basic приложения Excel можно получить полный доступ к информации об объектах приложения Outlook. Для этого нужно, находясь в приложении Excel открыть окно Microsoft Visual Basic (это можно сделать несколькими способами, но проще всего нажать комбинацию клавиш [Alt]+[F11]). Если затем в открывшемся окне Visual Basic переключиться в режим просмотра объектов (Object Browser), воспользовавшись для этого командой View | Object Browser или нажав клавишу [F2], можно просматривать информацию обо всех объектах Outlook. При этом можно, щелкнув правой кнопкой мыши на интересующем объекте и выбрав из появившегося меню команду Help, и получить интерактивную справку об этом объекте (рис. 9.2). Таким образом, разработчик, создавая программу для автоматизации клиента Excel, не испытывает никаких проблем с доступом к объектам сервера Outlook.

Объектная модель Outlook 2000 227

Рис. 9.2. Программируя работу Excel, можно иметь под рукой полную информацию по объектам Outlook —это возможно благодаря подключенной библиотеке типов

Назначение и основные свойства некоторых классов Outlook

Если выбрать в окне Object Browser класс Application, открыть окно справки (см. рис. 9.2)

и щелкнуть в этом окне на прямоугольнике, представляющем класс Application, откроется полная объектная модель Outlook, которая для удобства приведена на рис. 9.3.

Несмотря на кажущееся разнообразие, объектная модель Outlook 2000 довольно проста. Основными элементами этой модели являются: собственно приложение (класс Application), пространство имен (класс NameSpace), синхронизируемые объекты (класс SyncObject), списки адресов (класс AddressList), папки (класс MAPIFolder), иксплореры (класс Explorer), инспекторы (класс Inspector) и элементы, хранящиеся в папках (классы MailItem, NoteItem, JournalItem, MeetingItem и др.). С другой стороны, из довольно ограниченного набора простых объектов разработчики Outlook создали достаточно сложное и мощное приложение. Поэтому для эффективного программирования Outlook необходимо четко представлять назначение, организацию и методы использования всех объектов приложения.

Ниже приведено краткое описание назначения и организации основных классов Outlook. Методы практического использования этих классов при создании объектов сервера автоматизации будут рассмотрены по ходу разработки приложения Registrator.

228 Глава 9. Программирование в Outlook: документооборот и электронная почта

Рис. 9.3. Объектная модель Outlook 2000

Класс Application

Как уже неоднократно было рассказано в предыдущих главах, для обращения к объектам и другим элементам сервера автоматизации необходимо инициализировать объект класса Application. Это правило справедливо и для Outlook. Самыми важными свойствами объекта класса Application являются:

Explorers — содержит ссылку на коллекцию всех открытых иксплореров. Иксплорер — это объект класса Explorer, предназначенный для отображения содержимого папки Outlook.

Inspectors — содержит ссылку на коллекцию всех открытых инспекторов. Инспектор

— это объект класса Inspector, предназначенный для отображения содержимого элемента Outlook (почтового сообщения, контакта и т.п.).

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

Класс NameSpace

Класс NameSpace — это класс, обеспечивающий функцию “проходной” для доступа ко всем папкам и элементам Outlook, причем как иерархического доступа (т.е. с помощью последовательного перемещения по уровням вложенных объектов), так и прямого (по идентификатору объекта). В случае, когда Outlook используется в режиме непосредственной связи с Internet, использование объекта класса NameSpace сводится к простой формальности. Однако при работе с Outlook через сервер Microsoft Exchange Server данный объект выполняет такую важную функцию, как подклю-

Объектная модель Outlook 2000 229

чение к серверу с помощью запроса идентификатора пользователя и пароля. Разработчики Outlook предусмотрели возможность использования пространств имен различных типов, но в версии Outlook 2000 поддерживается только один тип — MAPI. Самыми важными свойствами объекта класса

NameSpace являются:

Folders — в данном случае содержит ссылку на коллекцию всех папок уровня пространства имен. Папка — это объект класса MAPIFolder, предназначенный для отображения всех папок, хранящихся на текущем уровне иерархии папок и элементов Outlook. Подробнее объекты класса MAPIFolder будут рассмотрены далее в этой главе.

SyncObjects — содержит ссылку на коллекцию объектов синхронизации. Объектом синхронизации называется объект класса SyncObject, с помощью которого обеспечивается синхронизация локальных папок Outlook с папками Microsoft Exchange Server в определенном режиме, например, ежедневно или раз в неделю.

AddressLists — содержит ссылку на коллекцию адресных книг, доступных в текущем сеансе. Адресная книга представляет собой объект класса AddressList, доступ к которой конкретному пользователю разрешен провайдером этой адресной книги.

Класс SyncObject

Как уже отмечалось, назначение объектов класса SyncObject— обеспечить синхронизацию определенных папок в определенном режиме. Свойства этого класса малоинтересны, за исключением свойства Name, в котором передается название синхронизируемой группы папок. А вот ме-

тоды (Start и Stop) и события Progress, SyncEnd и SyncStart достаточно важны для практического использования. Как нетрудно догадаться из их названий, эти методы и события используются для управления процессом синхронизации. Детальнее они будут рассмотрены несколько позже в этой главе.

Класс Explorer

Класс Explorer предназначен для отображения содержимого папок Outlook. Графический интерфейс объектов этого класса в общем случае напоминает графический интерфейс программы Проводник (Explorer) Windows. Однако функции объектов класса Explorer Outlook несколько

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

CurrentFolder — содержит ссылку на объект класса MAPIFolder, представляющий собой текущую открытую папку.

Selection — содержит ссылку на коллекцию всех выделенных элементов, содержащихся в папке.

CommandBars — содержит ссылку на коллекцию, которая представляет собой набор всех команд, доступ к которым в Outlook 2000 можно получить с помощью системы меню и панелей инструментов. Самым интересным свойством этой коллекции является то, что она меняется динамически, в зависимости от выбранного в данный момент элемента. Так, если активной является папка верхнего уровня иерархии, будут доступны одни команды, а если вложенная папка или элемент папки — другие команды. С помощью свойства

CommandBars иксплорера можно получить доступ к любой команде меню или панели инструментов Outlook.

Среди методов класса Explorer самыми важными являются методы Display и Close. Нетрудно догадаться, что вызов первого метода приводит к открытию окна Outlook (точнее, иксплорера, в котором отображаются определенные программистом компоненты окна Outlook), а второго

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

230 Глава 9. Программирование в Outlook: документооборот и электронная почта

Класс MAPIFolder

Класс MAPIFolder предназначен для создания доступа к содержимому объектов папок в текущем пространстве имен. Папки могут содержать как другие папки (коллекции Folders), так и элементы Outlook (коллекции Items) либо не содержать ни тех, ни других. Поэтому соответствующие свойства являются самыми важными свойствами объектов класса MAPIFolder.

Класс MailItem

Объекты класса MailItem представляют один из так называемых элементов Outlook. Элементами могут быть сообщения электронной почты (класс MailItem), контакты (ContactItem), сообщения групп новостей (PostItem), записи журнала (JournalItem) и другие объекты (всего в Outlook 2000 используется 16 классов элементов). Класс MailItem обладает рядом свойств, назначение которых легко понять по их названиям, — во многих случаях они совпадают с названиями соответствующих полей сообщений электронной почты или же подобны им.

Рис. 9.4. Окно программы Outlook Express, предназначенное для управления учетными записями

В завершение краткого обзора объектной модели Outlook опишем общую схему использования Outlook в качестве сервера автоматизации. Сначала необходимо создать объект класса Application, затем получить от этого объекта ссылку на пространства имен MAPI. После этого можно, используя иксплореры и инспекторы, просматривать папки сообщений и сами сообщения, а также с помощью соответствующих свойств иксплореров эмулировать выбор команд пользовательского интерфейса Outlook. Кроме того, применяя механизмы работы с коллекциями, можно программным путем обрабатывать папки (объекты класса MAPIFolder) и хранящиеся в них элементы, например, такие как объекты класса MailItem.

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

Создание учетных записей 231

Создание учетных записей

Для того чтобы приложение Outlook 2000 могло работать с электронной почтой, необходимо создать в нем учетные записи. В ООО “Универсал” работают десятки пользователей, но для краткости ограничимся только семью учетными записями — администратора узла, главного инженера, директора, отдела маркетинга, отдела сбыта, начальника ВЦ и общего почтового ящика. Если на компьютере администратора уже имеются учетные записи всех пользователей в программе Outlook Express, проще всего экспортировать их в файлы IAF, а затем импортировать в Outlook 2000.

Для этого нужно открыть окно Outlook Express и выбрать из меню команду Сервис | Учетные записи, а затем перейти в открывшемся окне на вкладку Почта (рис. 9.4). Для экспортирования выбранной учетной записи в файл нужно щелкнуть на кнопке Экспорт, а затем в открывшемся

окне ввести в поле Имя файла имя файла IAF, в который будет экспортирована информация из учетной записи, и щелкнуть мышью на кнопке Сохранить (рис. 9.5).

Рис. 9.5. Диалоговое окно Экспортировать учетную запись

Экспортировав первую запись (в рассматриваемом примере — администратора), нужно проделать те же операции со второй учетной записью и со всеми остальными учетными записями (рис. 9.6), по которым необходимо отслеживать статистику.

Теперь, когда все необходимые учетные записи экспортированы в файлы IAF, нужно проделать обратную операцию — импортировать полученные файлы IAF в приложение Outlook 2000.

Рис. 9.6. Сохраняя следующую учетную запись в файле, в выбранной папке для хранения IAF- файлов можно видеть все ранее сохраненные файлы учетных записей

232 Глава 9. Программирование в Outlook: документооборот и электронная почта

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

Рис. 9.7. Окно управления учетными записями Outlook 2000 — это тот же объект, который используется для этих целей в Outlook Express

Однако так как в ООО “Универсал” был выбран (как всегда) не самый простой, но зато универсальный (а значит “фирменный”) способ, будем рассматривать именно его. Операция импортирования учетных записей из файлов IAF в Outlook 2000 сводится к использованию все того же ок-

на Учетные записи в Интернете.

ПРИМЕЧАНИЕ

Кстати, окно в буквальном смысле то же самое, так как соответствующий компонент является независимым объектом, который используют и программа Outlook Express, и Outlook 2000. Именно по этой причине язык, используемый в этом окне, может отличаться от языка, используемого в приложении, если Outlook Express и Outlook 2000 используют разные языки пользовательского интерфейса.

Для открытия окна управления учетными записями Outlook 2000 необходимо, запустив приложение, выбрать из меню команду Сервис | Учетные записи, а затем перейти в открывшемся окне на вкладку Почта (рис. 9.7).

Соседние файлы в папке Книги