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

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

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

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

Код макроса

Sub SohranitVseVlojeniya()
'Шаг 1: Объявляем переменные
Dim ns As Namespace
Dim MyInbox As MAPIFolder
Dim MItem As MailItem
Dim Atmt As Attachment
Dim FileName As String
'Шаг 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:\Temp\MyAttachments\"
'Шаг 5: Начните цикл по каждому элементу почты
For Each MItem In MyInbox.Items
'Шаг 6: Сохраните каждое вложение и перейдите к следующему
For Each Atmt In MItem.Attachments
FileName = "C:\Temp\MyAttachments\" & Atmt.FileName
Atmt.SaveAsFile FileName
Next Atmt
'Шаг 7: Перейти к следующему элементу почты
Next MItem
'Шаг 8: Очистка памяти
Set ns = Nothing
Set MyInbox = Nothing
End Sub

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

  1. Шаг 1 объявляет пять переменных. ns — это объект, используемый для предоставления пространства имен MAPI. MyInbox используется для показа целевой почтовой папки. MItem используется для выставления свойств почты. Atmt — это переменная объекта, которая содержит объект Attachment. FileName — это строковая переменная, которое содержит имя вложения.
  2. Шаг 2 устанавливает переменную MyInbox так, чтобы она указывала на папку «Входящие» для почтового клиента по умолчанию.
  3. Шаг 3 выполняет быструю проверку, чтобы убедиться, что в папке «Входящие» действительно есть сообщения. Если там нет сообщений, макрос завершает процедуру с окном сообщения о том, что Сообщений нет.
  4. Шаг 4 создает каталог для хранения найденных вложений. Хотя вы могли бы использовать существующий, лучше создать новый каталог. Обратите внимание, что мы используем On Error Resume Next. Это гарантирует, что код не выдаст ошибку, если каталог, который мы пытаемся создать уже существует.
  5. Шаг 5 запускает цикл по каждому почтовому элементу в целевой почтовой папке.
  6. Шаг 6 гарантирует, что каждый почтовый элемент, который мы перебираем, проверяется на вложения. Цикл сохраняет каждое вложение, которое мы находим в указанном каталоге, который создали.
  7. Шаг 7 возвращается к шагу 5 до тех пор, пока не останется больше почтовых отправлений.
  8. Как правило, рекомендуется освобождать объекты, назначенные нашим переменным. Это уменьшает вероятность любых проблем, вызванных объектами, которые могут оставаться открытыми в памяти. В коде мы просто устанавливаем переменную Nothing.

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

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

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