使用Access VBA从Outlook获取附件

时间:2011-03-16 22:34:19

标签: vba ms-access outlook

我在Outlook中创建了一个名为“Reports”的文件夹。此文件夹包含每封电子邮件中包含一个附件的电子邮件我想使用ACCESS VBA将附件从Outlook中的“Reports”文件夹保存到我的计算机中的本地驱动器。这是我到目前为止的代码,但给了我错误。请帮忙:

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 个答案:

答案 0 :(得分:2)

您的“报告”文件夹是否位于“收件箱”文件夹中?您可能需要执行以下操作:

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

保存附件的语法看起来是正确的(除了您的评论对VBA不正确)。您可以打印出要创建的文件名,以查看它是否是有效名称。我假设您已经创建了自己提到的Automation文件夹。

<强>更新 尝试将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”开头的项目,然后获取其下的Reports文件夹。它似乎比获取收件箱的父亲更麻烦。这看起来也很麻烦,但我找不到直接进入Mailbox文件夹的方法。

答案 1 :(得分:1)

替换

           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可以。这应该可以解决你的问题。

戴维斯罗杰斯

答案 2 :(得分:0)

替换

Dim Atmt As Attachment

Dim Atmt As Outlook.Attachment

它将使Access为atmt找到正确的Class。