Как сохранить определенные вложения в папку

Что делает макрос: В предыдущей процедуре, мы показали вам, как использовать автоматизацию для поиска всех вложений в почтовом ящике и сохранения их в указанную папку. Тем не менее, в большинстве случаев, нужно сохранить только определенные вложения. Например, те вложения, которые прилагаются к письмам с определенной темой. В этом примере, макрос поможет сохранить определенные вложения в папку, проверяя наличие определенного синтаксиса.

Как макрос работает

Поскольку этот код запускается из Excel, нам нужно установить ссылку на объект Microsoft Outlook Library.. Мы можем установить ссылку, открыв редактор Visual Basic в Excel и выбрав Tools➜References. Прокрутите вниз, пока мы не найдете запись Microsoft Outlook XX Object Library, где XX — это ваша версия Outlook. Поставьте флажок в поле рядом с записью.

Код макроса

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
'Шаг: оздать каталог для хранения вложений
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-" &amp; i &amp; "-" &amp; Atmt.FileName
Atmt.SaveAsFile FileName
i = i + 1
Next Atmt
'Шаг 8: Перейти к следующему элементу почты
SkipIt:
Next MItem
'Шаг 9: Очистка памяти
Set ns = Nothing
Set MyInbox = Nothing
End Sub

Как этот код работает

  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. Как правило, рекомендуется освобождать объекты, назначенные нашим переменным. Это уменьшает вероятность любых проблем, вызванных объектами, которые могут оставаться открытыми в памяти. В коде мы просто устанавливаем переменную Nothing.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.
Оцените статью
Добавить комментарий

  1. Екатерина

    Здравствуйте, Дмитрий!
    В первую очередь хотелось бы поблагодарить Вас за весьма интересные, подробно описанные и полезные коды программ для VBA.
    На данную тему работы с почтовыми сообщениями возник вопрос. Подскажите, пожалуйста, как скачать письма со всеми вложениями за определенный период в папку на компьютере?
    Заранее благодарю за помощь! Надеюсь на Ваш ответ!
    С уважением, Екатерина

    Ответить