Unread Mail в Outlook

Программирование на Visual Basic for Applications
and
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 22.02.2008 (Пт) 15:14

Unread Mail в Outlook

Сообщение and » 30.07.2008 (Ср) 15:28

добрый день, подскажите пожалуйста, как написать скрипт на ВБА, который бы сохранял Аттач во всех непрочитанных письмах. Основная проблема в том, что просто пройтись по папке инбокс скорее всего не получится так как есть правила которые перекидывают письма во вложенные папки Инбокса, а в этих папка есть еще волженные папки (например: Inbox\Склад\Операторы или Inbox\Логистика)

благодарю.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 31.07.2008 (Чт) 11:19

Ну если ты знаком с тем, как получить инбокс, то спешу сообщить, что у класса MAPIFolder есть коллекция Folders, в ней - все дочерние папки.

То есть если ты получаешь inbox как то так:

Код: Выделить всё
Dim myFolder As MAPIFolder
Set myFolder = Application.Session.GetDefaultFolder (olFolderInbox)

То можно потом просто получить вложенную папку склад:
Код: Выделить всё
Public Function getFolderByName(folderName As String, folderCollection As Folders) As MAPIFolder
Dim aFolder As MAPIFolder
For Each aFolder In folderCollection
If aFolder.Name = folderName Then
getFolderByName = aFolder
Exit Function
Next aFolder
End Function

Dim skladFolder = getFolderByName("Склад",myFolder.Folders)




Функцию getFolderByName я написал потому что Folders возвращает папки только по индексу.



Ну а дальше я думаю все просто - получаешь все Items из папки, проверяешь их TypeOf чтоб был MailItem и если .Unread то For Each Att In .Attachments делаешь Att.SaveAsFile(Att.FileName).



Как то так :)
I don't understand. Sorry.

and
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 22.02.2008 (Пт) 15:14

Сообщение and » 31.07.2008 (Чт) 12:30

Так в том то и проблема, я не знаю ни названий папок в которые распихиваются письма, ни сколько там уровней сделает себе пользователь, а проверить нада все непрочитанные сообщения.
Таким методом я получаю только дочерние папки от Inboxa, а дочерние от тех дочерних и т.д. ??

П.С. Тупанул :), простая рекурсия, просто если в Текущей проверяемой папке Итем является папкой, то вызывать функцию проверки этого итема
Последний раз редактировалось and 31.07.2008 (Чт) 12:36, всего редактировалось 1 раз.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 31.07.2008 (Чт) 12:32

А ты думай абстрактно.
Lasciate ogni speranza, voi ch'entrate.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 31.07.2008 (Чт) 13:17

Тогда тебе еще проще - не надо даже получать папку по имени - просто перебирай всю коллекцию подряд :)
I don't understand. Sorry.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList