Получение вложения из Outlook с помощью Access VBA - PullRequest
1 голос
/ 17 марта 2011

У меня есть созданная папка в моем внешнем виде с именем «Отчеты». Эта папка содержит электронные письма с одним вложением в каждом электронном письме. Я хотел бы использовать ACCESS VBA для сохранения вложений из папки «Отчеты» в Outlook на локальный диск на моем компьютере. Вот код, который у меня есть, но он дает мне ошибки. Пожалуйста, помогите:

Sub GetAttachments()

Dim ns As NameSpace
Dim Inbox As Outlook.MAPIFolder
Dim folder As Outlook.MAPIFolder

Dim Item As Object
Dim Atmt As Attachment
Dim FileName As String
Dim i As Integer


Set ns = GetNamespace("MAPI")

Set Inbox = ns.Folders.Item("Reports") // I get an error in this line says an object could not be found 


i = 0

If Inbox.Items.Count = 0 Then
   MsgBox "There are no messages in the Inbox.", vbInformation, _
        "Nothing Found"
   Exit Sub
End If


For Each Item In Inbox.Items
   For Each Atmt In Item.Attachments
     FileName = "C:\Automation\" & Atmt.FileName

     Atmt.SaveAsFile FileName   // here is another error says method is not found
     i = i + 1
   Next Atmt
Next Item

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Находится ли папка «Отчеты» в папке «Входящие»? Возможно, вам нужно сделать что-то вроде этого:

Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set RptFolder = Inbox.Folders("Reports") 

Ваш синтаксис для сохранения вложений выглядит правильным (если не считать ваших комментариев неправильными для VBA). Вы можете распечатать имя файла, которое вы создаете, чтобы увидеть, является ли оно действительным именем. И я предполагаю, что вы создали папку автоматизации, которую вы упоминаете.

Обновление: Попробуйте объявить свой Atmt как Outlook.Attachment. Существует такая вещь, как Access.Attachment, у которого нет метода SaveAsFile, и он, вероятно, выбирает его первым. Если вы включите имя библиотеки, вы должны получить то, что вам нужно.

Обновление 2: Чтобы попасть в папку «Отчеты», один из способов - это получить папку «Входящие», как вы это делаете в настоящее время, затем получить ее родительский элемент, а затем получить папку «Отчеты».

Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
Set Mailbox = Inbox.Parent
Set RptFolder = Mailbox.Folders("Reports") 

Другим способом было бы отсканировать элементы в «ns», чтобы найти тот, который начинается с «Mailbox», а затем получить папку «Отчеты» под этим. Это кажется немного более громоздким, чем получение родительского почтового ящика. Это также кажется громоздким, но я не смог найти способ, чтобы напрямую попасть в папку «Почтовый ящик».

1 голос
/ 20 сентября 2013

Заменить

           For Each Item In Inbox.Items
             For Each Atmt In Item.Attachments
               FileName = "C:\Automation\" & Atmt.FileName

               Atmt.SaveAsFile FileName   // here is another error says method is not found
               i = i + 1
            Next Atmt

на .....

          For Each Item In Inbox.Items
            For Each Atmt In Item.Attachments
              FileName = "C:\Automation\" & Atmt.FileName

              Attachments.SaveAsFile FileName   // here is another error says method is not found
              i = i + 1
           Next Atmt

Outlook не имеет проблемы с atmt в справочной информации, однако MS Access делает.Это должно решить вашу проблему.

Дэвис Роджерс

0 голосов
/ 19 марта 2018

Заменить

Dim Atmt As Attachment

с

Dim Atmt As Outlook.Attachment

Это позволит Access найти правильный класс для atmt.

...