Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7957
Скачиваний: 25

With
I )
14: If
"(313)" > 0)
Then
15:
=
17:
18: End
If
19: End With
20: Next I
Sub
I Строки
получают объект MAPI
для контактов. Строка 10 со-
I держит объявление целочисленной переменной, которая будет использо-
вана в цикле. Заголовок цикла размещен в строке 12. Следующая за ним
конструкция with призвана исключить необходимость повторения по-
стоянного префикса
Items
при наборе кода.
Принадлежность переменной очередному элементу коллекции,
обу-
словливается символом точки
предшествующим имени, и самим фактом упоми-
нания переменной внутри блока With . . . End With. (Если мне не изменяет па-
мять, конструкция W i t h . . . End with на страницах нашей книги еще не появля-
лась. Более подробные сведения о ней вы найдете далее, рядом с пиктограммой при-
мечания.) Остальная часть текста процедуры листинга 24.7 должна быть вам понятна.
Конструкция на основе служебного слова with облегчает задачу
многократного обращения к атрибутам одного и того же глубоко
вложенного объекта. Например, выражение W i t h
I
(I) позволяет избежать необходимости повторения постоянного
префикса, ссылающегося на элемент коллекции Items из состава Con-
tactFolder. Чтобы указать на принадлежность атрибута этому объекту,
достаточно ввести оператор точки
— скажем,
Number.
Поиск заданной строки в сообщениях
электронной почты
Объекты класса
используются в нескольких "почтовых" коллекциях
данных (или, с точки зрения пользователя, папках)
это (см. рис. 24.1 и
табл. 24.1) Входящие (Inbox), Исходящие (Outbox), Отправленные (Sent Items),
Черновики (Drafts) и Удаленные (Deleted Mail). Объект Mailltem сохраняет информа-
цию об отправителе и получателях сообщения, а также о его содержимом. В этом раз-
деле будет рассмотрен пример процедуры, решающей задачу поиска литеральной сим-
вольной строки в сообщениях электронной почты.
Вы наверняка мечтали о волшебном решете, которое смогло бы помочь быстро
просеивать сообщения электронной почты. Теперь вы получаете реальную возмож-
ность самостоятельного решения подобной задачи. Все, что необходимо — это не-
большой блок кода на языке VBA и Automation-сервер Outlook. Внимательно изучите
листинг 24.8.
24-й час. Управление информацией о контактах Outlook 435

Свойство Body объекта
Item содержит текст сообщения. Если
текст написан на языке HTML, при поиске или просмотре данных
возможны нежелательные эффекты и искажения.
Листинг 24.8. Пример процедуры поиска символьной строки в сообщениях
электронной почты
9
10:
11:
13:
14:
15:
16:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
40:
41:
44:
45:
46:
Sub Test ( )
Dim Outlook As New
Dim
As
Set NameSpace =
"MAPI" )
Dim
As MAPIFolder
Set Deletedltems =
Dim
As
Dim I As Integer
: Dim
As Long
: Dim As Long
: Dim Count As Long
: RefCount = 0
:
= 0
: For I = 1 To
: If TypeOf
Is Mailltem Then
: Set Mailltem =
: Count =
"Microsoft",
: If (Count > 0) Then
: ItemRefCount = ItemRefCount + 1
: RefCount = RefCount + Count
: End If
: End If
Next I
"Всего удаленных:
&
"Всего ссылок на
& RefCount
"Удаленных, содержащих ссылку
& _
/
* 100, 2) &
End Sub
Function
Word As String,
ByRef Mailltem As Mailltem ) As Long
Dim P As Long
P = 1
Do While (True)
P = InStr( P + 1,
Word
If (P > 0) Then
436
Часть VIII. Объектно-ориентированное программирование в Access

48:
4 9 :
50:
51:
+ 1
CountWord
Else
Exit Do
End If
Loop
End Function
Процедура Test, представленная в листинге 24.8, создает объект Outlook,
I получает ссылку на папку Удаленные и вызывает функцию CountWord,
передавая в качестве параметров искомую литеральную строку и адрес
одного из объектов коллекции удаленных сообщений. В окне Immediate
выводится общее число удаленных сообщений, число
сообще-
ний, содержащих ссылку на Microsoft и их процентное соотношение в
общем количестве удаленных сообщений.
Ранее вы не встречались с оператором TypeOf , используемым в строке 22. Выра-
жение TypeOf Объект Is Класс используют для того, чтобы динамически опреде-
лять, является ли указанный объект элементом заданного класса. Вспомните: коллек-
ции могут хранить данные любого типа. В листинге 24.8 заложена информация о том,
что коллекция
Item содержит объекты папок
нам нужно
лишь найти объект Mailltem. В ходе работы программы проверяются только удален-
ные объекты Mailltem, а, например, удаленные заметки (объекты Noteltem) коллек-
ции
Item не проверяются.
Функции CountWord, расположенной в строках
передаются в качестве ар-
гументов Word и Mailltem. Здесь, используя простой цикл вида Do While . . . Loop,
стандартная функция
отыскивает в теле сообщения экземпляры строки аргу-
мента и подсчитывает их количество. Если результат поиска неуспешен, цикл завер-
шается и функция возвращает значение 0.
Восстановление удаленных сообщений
Объекты MAPI Folder разрешается перемещать из одной коллекции (или папки) в
другую. Например, вам может понадобиться сохранить архив
в новой пап-
ке MAPI Folder. Другой пример связан с необходимостью автоматического восстанов-
ления ранее удаленных сообщений на основе определенных критериев поиска. Лис-
тинг 24.9 содержит текст процедуры, предназначенной для восстановления
(посредством команды Move) сообщений с определенным именем отправителя.
Листинг 24.9. Пример процедуры восстановления удаленных сообщений, отвечающих
заданному критерию поиска
11
12
13
Sub
)
Call
"Иван Иванов" )
End Sub
Sub UndeleteMailFrom(
As String )
Dim Outlook As New
Dim Folder As MAPIFolder
Set Folder =
"MAPI" )
)
: Dim
As Mailltem
: For Each Deletedltem In
: If (TypeOf Deletedltem Is Mailltem) Then
24-й час. Управление информацией о контактах Outlook
437

14
15
16
17
18
20
If
=
Then
Call
)
End If
End If
Next
End Sub
He
если Outlook отобразит сообщение с требованием
подтвердить, что вы позволяете другой
в данном случае
Access, отправлять сообщения от вашего имени. Это часть новой системы
безопасности Outlook. Щелкните на кнопке Да (Yes) и позвольте VBA-
немного поработать со своими сообщениями.
При создании контроллеров автоматизации для Outlook посоветуйтесь с
администратором сети по поводу возможности отключить средства
безопасности для почтовых сообщений.
В строках
листинга 24.9 размещена подпрограмма, предназначенная для
| тестирования основной процедуры
приведенной ниже.
В строках
создаются экземпляр Outlook и объект
ссылаю-
щийся на папку
Конструкция цикла For Each была выбрана
по той причине, что при удалении элемента коллекции изменяется значение
атрибута Count. Применение же в подобном случае цикла вида For
Next требует наличия дополнительных проверок, позволяющих избежать
возникновения ошибки выхода индекса за допустимые границы. Условное
выражение в строке
проверяет, является ли удаленный элемент почтовым
сообщением, а в строке 14 осуществляется сопоставление имени отправителя
сообщения с содержимым аргумента процедуры. В случае успеха сообщение
перемещается из папки Удаленные в папку Входящие.
При удалении элементов коллекции можно использовать цикл For
Next. Просто выполняйте итерации от элемента с индексом Count до
первого элемента с шагом, равным -1, т.е. от последнего элемента к
первому. При удалении элемента размер
уменьшится, но
наименьший индекс (равный 1) останется неизменным.
В листинге 24.9 цикл For Each использован для ясности, здесь элемент
коллекции присваивается временной переменной. Подробнее о циклах и
условных операторах см. главу "5-й час. Программирование управляющих
структур"
Еще один вариант выполнения операции сравнения связан с использованием функ-
ции strCmp, позволяющей управлять признаком чувствительности к регистру символов.
Автоматическая рассылка почтовых
сообщений
Задача автоматической рассылки почты возникает в самых разных ситуациях. Изобре-
тать что-то новое вовсе не обязательно, да и просто нецелесообразно — воспользуйтесь го-
товыми средствами Outlook. Подобный подход особенно эффективен для небольших ком-
паний, не имеющих возможность финансировать крупные программные проекты. Лис-
тинг
показывает, насколько простым может быть решение такой задачи.
438
Часть VIII. Объектно-ориентированное программирование в Access

Я крайне отрицательно отношусь к использованию высокотехно-
логичных программных средств в сомнительных целях — в данном
случае имеется в виду автоматическая рассылка так называемых
нежелательных почтовых сообщений (spam). Некоторые личности,
пытающиеся заявить миру о своем существовании, засоряют каналы
Internet и почтовые ящики добропорядочных граждан лавиной элек-
тронного мусора, причиняя тем самым немалый материальный и
моральный ущерб.
Новая система безопасности Outlook 2002 препятствует доступу VBA-
кода к контактам. Это связано с распространением в последние годы
вирусов, которые, являясь VBA-приложениями, считывают ваши кон-
такты и рассылают по ним сообщения, выполняя подобную операцию
на компьютерах всех получателей таких писем.
Листинг
Пример процедуры автоматической рассылки почтовых сообщений
1
2
3
4
5
6
7
8
9
10:
11:
14:
Sub
)
Dim Outlook As New
Dim Folder As MAPIFolder
Set Folder =
"MAPI" )
olFolderContacts )
Dim Contact As Variant
Dim Mailltem As Mailltem
For Each Contact In
Set Mailltem =
=
:
= "Тест массовой рассылки"
:
= "Тестовое сообщение"
Next
Sub
Код листинга
предполагает просмотр адресной книги и автоматиче-
скую отправку каждому зарегистрированному в ней абоненту тестового
сообщения. Минимальный набор действий таков: следует создать объект
сообщения (строка 9) и указать в нем адрес получателя (строка 10). Если
этим ограничиться, адресаты получат пустые сообщения. Команды
строк И и 12 позволяют указать тему сообщения и наполнить его реаль-
ным содержанием. Метод Send, вызываемый в строке 13, выполняет от-
правку сообщения по назначению.
Резюме
Неужели? Да-да, это правда. Вы одержали победу — примите поздравления! Приобре-
тенный опыт дался вам, смеем надеяться, относительно легко — пустившись в свободное
плавание на свой страх и риск, вы затратили бы гораздо больше времени и усилий.
Главная цель этого занятия состояла в том, чтобы продемонстрировать вам всю
мощь Access, VBA и объектно-ориентированного подхода в целом. Для вас наверняка
не был новым тот факт, что приложения Microsoft Office XP могут осуществлять вза-
имный обмен информацией — теперь же вы узнали о способах коллективного доступа
к объектам на программном уровне. Outlook — мощное самостоятельное приложение,
и, разумеется, совершенно невозможно втиснуть исчерпывающее описание лежащей
24-й час. Управление информацией о контактах Outlook
439