01 Что делает макрос
Если нужно сохранить не все вложения, а только определенные – поможет этот макрос. Например, те вложения, которые прилагаются к письмам с определенной темой. Этот макрос сохраняет вложения в папку, проверяя наличие определенного синтаксиса.
Поскольку этот код запускается из Excel, необходимо установить ссылку на библиотеку объектов Microsoft Outlook. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜References. Прокрутите вниз, пока не найдете запись Microsoft Outlook XX Object Library, где XX— это ваша версия Outlook. Установите флажок рядом с записью.
02 Код макроса
Sub
SohranitOpredelennieVlojeniya()
'Шаг 1: Объявляем переменные
Dim
ns
As
Namespace
Dim
MyInbox
As
MAPIFolder
Dim
MItem
As
Object
Dim
Atmt
As
Attachment
Dim
FileName
As
String
Dim
i
As
Integer
'Шаг 2: Установите ссылку на наш почтовый ящик
Set
ns = GetNamespace(
"MAPI"
)
Set
MyInbox = ns.GetDefaultFolder(olFolderInbox)
'Шаг 3: Проверьте наличие сообщений в почтовом ящике; выход из макроса, если их нет
If
MyInbox.Items.Count = 0
Then
MsgBox
"В папке нет сообщений."
Exit
Sub
End
If
'Шаг 4: Создать каталог для хранения вложений
On
Error
Resume
Next
MkDir "C:\OffTheGrid\MyAttachments\"
'Шаг 5: Начать цикл по каждому элементу почты
For
Each
MItem
In
MyInbox.Items
'Шаг 6: Проверить наличие слов в поле «Тема»
If
InStr(1, MItem.Subject,
"Предоставление данных"
) < 1
Then
GoTo
SkipIt
End
If
'Шаг 7: Сохранить каждое вложение и переход к следующему вложению
i = 0
For
Each
Atmt
In
MItem.Attachments
FileName = _
"C:\Temp\MyAttachments\Attachment-"
& i &
"-"
& Atmt.FileName
Atmt.SaveAsFile FileName
i = i + 1
Next
Atmt
'Шаг 8: Перейти к следующему элементу почты
SkipIt:
Next
MItem
'Шаг 9: Очистка памяти
Set
ns =
Nothing
Set
MyInbox =
Nothing
End
Sub
03 Как работает макрос
1. Шаг 1 сначала объявляет шесть переменных. ns — это объект, используемый для предоставления пространства имен MAPI. MyInbox используется для предоставления целевой почтовой папки. MItem используется для раскрытия свойств почтового элемента. Atmt — это переменная объекта, которая содержит объект Attachment. FileName – это строковая переменная, которая содержит имя вложения. i является целочисленной переменной, используемой, чтобы убедиться, что каждое вложение сохранено как уникальное имя.
2. Шаг 2 устанавливает переменную MyInbox так, чтобы она указывала на папку «Входящие» для нашего почтового клиента по умолчанию.
3. Шаг 3 выполняет быструю проверку, чтобы убедиться, что в нашем почтовом ящике действительно есть сообщения. Если там нет сообщений, он выходит из процедуры с сообщением о том, что нет сообщений.
4. Шаг 4 создает каталог для хранения найденных вложений. Обратите внимание, что он использует On Error Resume Next. Это гарантирует, что код не выдаст ошибку, если каталог, который мы пытаемся создать уже существует.
5. Шаг 5 запускает цикл по каждому почтовому элементу в целевой почтовой папке.
6. На шаге 6 мы используем функцию Instr, чтобы проверить, находится ли строка Data Submission в Теме электронного письма. Если эта строка не существует, она нас не волнует. Поэтому мы заставляем код перейти на ссылку SkipIt (на шаге 8). Поскольку строка кода, следующая сразу за ссылкой SkipIt, является Команда «Переместить далее», в результате чего процедура переходит к следующему письму.
7. Шаг 7 перебирает и сохраняет каждое вложение в указанном нами каталоге. Обратите внимание, что мы добавляем целое число к имени каждого вложения. Это обеспечивает сохранение каждого вложения под уникальным именем, что помогает нам избежать перезаписи.
8. Шаг 8 возвращается к шагу 5 до тех пор, пока не останется больше почтовых отправлений.
9. Последним шагом мы очищаем память объектов, присвоенных нашим переменным. Это снижает вероятность каких-либо проблем, вызванных объектами, которые могут остаться открытыми в памяти.
04 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
05 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь