|
Программирование >> Проектирование интерфейса пользователя
Свойство 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
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 показывает, насколько простым может быть решение такой задачи.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |