Программирование >>  Проектирование интерфейса пользователя 

1 ... 135 136 137 [ 138 ] 139 140 141 ... 153


Свойство Body объекта Mail ltem содержит текст сообщения. Если текст написан на языке HTML, при поиске или просмотре данных возможны нежелательные эффекты и искажения.

Листинг 24.8. Пример процедуры поиска символьной строки в сообщениях электронной почт1

7 : .8:

28: 29: 30 : 31:

32: 33: 34:

Sub Test ( )

Dim Outlook As New Outlook.Application Dim NameSpace As NameSpace

Set NameSpace = Outlook.GetNameSpace( MAPI Dim Deletedltems As MAPlFolder Set Deletedltems =

NameSpace.GetDefaultFolder( olFolderDeletedltems ) Di Item As Mailitem

Dim I As Integer

DiKount As Long Dim As Long Dim Count As

RefCount = 0 ItemRefCount

Long

= 0

For I = 1 To Deletedltems.Items.Count

If TypeO s. Items (I) Is Mailltem Then Set Mailltem = Deletedltems.Item{I) Count = CountWord( Microsoft , Mailltem)

If (Count > 0) Then

ItemRefCount = ItemRefCount + 1 RefCount = RefCount + Count End If End If

Next I

&

Debug.Print Всего удаленных:

Deletedltems.Items.Count Debug.Print Всего ссылок н of t: & RefCount Debug.Print Удаленных, содержащих ссылку &

Round((ItemRefCount / Deletedltems.Items.Count) * 100, 2) & %

36:End Sub 37 : 3 8 : 39: 40: 41: 42 : 43: 44: 45: 46:

Function rd (ByVal Word As String,

ByRef Mailltem As Mailltem ) As Long

Dim P As Long P = 1

Do While (True)

P = lnStr( P + 1, Mailltem.Body, Word If (P > 0) Then



47: CountWord = CountWord + 1

48: Else

49: Exit Do

50: End If

51: Loop

52: End Function

Процедура Test, представленная в листинге 24.8, создает объект Outlook, II получает сс]лку на папку Удаленные и вызывает функцию CountWord, передавая в качестве параметров искомую литеральную строку и адрес

одного из объектов коллекции удаленных сообщений. В окне Immediate

выводится общее число удаленных сообщений, число удаленных сообщений, содержащих ссылку на Microsoft и их процентное соотношение в

общем количестве удаленных сообщений.

Ранее вы не встречались с оператором TypeOf , используемым в строке 22. Выражение TypeOf Объект Is Класс используют для того, чтобы динамически определять, является ли указанный объект элементом заданного класса. Вспомните: коллекции могут хранить данные любого типа. В листинге 24.8 заложена информация о том, что коллекция Item содержит объекты папок нам нужно

лишь найти объект Mailltem. В ходе работы программы проверяются только удаленные объекты Mailltem, а, например, удаленные заметки (объекты Noteltem) коллекции Item не проверяются.

Функции CountWord, расположенной в строках 39-52, передаются в качестве аргументов Word и Mailltem. Здесь, используя простой цикл вида Do While . . . Loop, стандартная функция InStr отыскивает в теле сообщения экземпляры строки аргумента и подсчитывает их количество. Если результат поиска неуспешен, цикл завершается и функция возвращает значение 0.

Восстановление удаленных сообщений

Объекты MAPI Folder разрещается перемещать из одной коллекции (или папки) в другую. Например, вам может понадобиться сохранить архив сообщений в новой папке MAPI Folder. Другой пример связан с необходимостью автоматического восстановления ранее удаленных сообщений на основе определенных критериев поиска. Листинг 24.9 содержит текст процедуры, предназначенной для восстановления (посредством команды Move) сообщений с определенным именем отправителя.

Листинг 24.9. Пример процедуры восстановления удаленных сообщений, отвечающих заданному критерию поиска

b TestUndelete ( )

Call UndeleteMailFrom( Иван Иванов ) d Sub.

b UndeleteMailFrom( ByVal SenderName As String ) Dim Outlook As New Outlook.Application Dim Folder As MAPlFolder Set Folder =

Outlook.GetNameSpace( MAPI ) .GetDefaultFolder( olFolderDeletedltems ) Dim As Mailltem

For Each Deletedltem In Folder. Items

If (lypeOf Deletedltem Is Mailltem) Then

10 :

12 :

13 :



14 15 16 17 18 19 20

If (Deletedltem.SenderName = SenderName) Then

Call Deletedltem.Move(GetNameSpace( MAPI ) .GetDefaultFolder(olFolderlnbox) )

End lf End lf

Next End Sub


He если Outlook отобразит сообщение с требованием

подтвердить, что вы позволяете другой программе, в данном случае Access, отправлять сообщения от вашего имени. Это часть новой системы безопасности Outlook. Щелкните на кнопке Да (Yes) и позвольте VBA-коду немного поработать со своими сообщениями.

При создании контроллеров автоматизации для Outlook посоветуйтесь с администратором сети по поводу возможности отключить средства

безопасности для почтовых сообщений.

В строках 1-3 листинга 24.9 размещена подпрограмма, предназначенная для II тестирования основной пропедуры (UndeleteMailFrom), приведенной ниже. В строках 5-8 создаются экземпляр Outlook и объект MAPlFolder, ссьшаю-щийся на папку Deletedltems. Конструкпия пикла For Each бьша выбрана по той причине, что при удалении элемента коллекции изменяется значение атрибута Count. Применение же в подобном случае пикла ввда For ... Next требует наличия дополнительных проверок, позволяющих избежать возникновения ошибки выхода индекса за допустимые границы. Условное выражение в строке 13 проверяет, является ли удаленный элемент почтовым сообщением, а в строке 14 осуществляется сопоставление имени отправителя сообщения с содержимым аргумента процедуры. В случае успеха сообщение перемещается из папки Удаленные в папку Входящие.


При удалении элементов коллекции можно использовать цикл For Next. Просто выполняйте итерации от элемента с индексом Count до первого элемента с шагом, равным -1, т.е. от последнего элемента к первому. При удалении элемента размер .коллекции уменьшится, но наименьший индекс (равный 1) останется неизменным. В листинге 24.9 цикл For Each использован для ясности, здесь элемент коллекции присваивается временной переменной. Подробнее о циклах и условных операторах см. главу 5-й час. Программирование управляющих структур

Еще один вариант выполнения операции сравнения связан с использованием функции strCmp, позволяющей управлять признаком чувствительности к регистру символов.

Автоматическая рассылка почтовых сообщений

Задача автоматической расс1лки почты возникает в сам1х разн1х ситуациях. Изобретать что-то новое вовсе не обязательно, да и просто нецелесообразно - воспользуйтесь готовыми средствами Outlook. Подобный подход особенно эффективен для небольших компаний, не имеющих возможность финансировать крупные программные проекты. Листинг 24.10 показывает, насколько простым может быть решение такой задачи.



1 ... 135 136 137 [ 138 ] 139 140 141 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика