Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7957

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 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


background image

Свойство 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


background image

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


background image

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


background image

Я крайне отрицательно отношусь к использованию высокотехно-
логичных программных средств в сомнительных целях — в данном

случае имеется в виду автоматическая рассылка так называемых
нежелательных почтовых сообщений (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