01 Что делает макрос
Если нужно сохранить не все вложения, а только определенные – поможет этот макрос. Например, те вложения, которые прилагаются к письмам с определенной темой. Этот макрос сохраняет вложения в папку, проверяя наличие определенного синтаксиса.
Поскольку этот код запускается из Excel, необходимо установить ссылку на библиотеку объектов Microsoft Outlook. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜References. Прокрутите вниз, пока не найдете запись Microsoft Outlook XX Object Library, где XX— это ваша версия Outlook. Установите флажок рядом с записью.
02 Код макроса
SubSohranitOpredelennieVlojeniya()'Шаг 1: Объявляем переменныеDimnsAsNamespaceDimMyInboxAsMAPIFolderDimMItemAsObjectDimAtmtAsAttachmentDimFileNameAsStringDimiAsInteger'Шаг 2: Установите ссылку на наш почтовый ящикSetns = GetNamespace("MAPI")SetMyInbox = ns.GetDefaultFolder(olFolderInbox)'Шаг 3: Проверьте наличие сообщений в почтовом ящике; выход из макроса, если их нетIfMyInbox.Items.Count = 0ThenMsgBox"В папке нет сообщений."ExitSubEndIf'Шаг 4: Создать каталог для хранения вложенийOnErrorResumeNextMkDir "C:\OffTheGrid\MyAttachments\"'Шаг 5: Начать цикл по каждому элементу почтыForEachMItemInMyInbox.Items'Шаг 6: Проверить наличие слов в поле «Тема»IfInStr(1, MItem.Subject,"Предоставление данных") < 1ThenGoToSkipItEndIf'Шаг 7: Сохранить каждое вложение и переход к следующему вложениюi = 0ForEachAtmtInMItem.AttachmentsFileName = _"C:\Temp\MyAttachments\Attachment-"& i &"-"& Atmt.FileNameAtmt.SaveAsFile FileNamei = i + 1NextAtmt'Шаг 8: Перейти к следующему элементу почтыSkipIt:NextMItem'Шаг 9: Очистка памятиSetns =NothingSetMyInbox =NothingEndSub
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
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь