2011-03-16 172 views
1

我的Outlook中有一个名为“Reports”的已创建文件夹。此文件夹包含每封电子邮件中包含附件的电子邮件。我想使用ACCESS VBA将附件从Outlook中的“Reports”文件夹保存到我的计算机中的本地驱动器中。这里是我到目前为止的代码,但给我错误。请帮助:使用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 

回答

2

您的报告文件夹是否位于收件箱文件夹内?你可能需要做这样的事情:

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”查找以“邮箱”启动一个,然后拿到报表文件夹下的那个。看起来比获取收件箱的父母更麻烦一些。这似乎也很麻烦,但我找不到直接进入邮箱文件夹的方法。

+0

托德您好,感谢您的回答。实际上,“报告”文件夹不在我的收件箱文件夹中。它直接在邮箱下。 – guest1 2011-03-17 14:13:11

+0

为了保存附件,当我写atmt。 “SaveAsFile”属性不会从列表中显示。我需要添加任何具体的参考吗?谢谢, – guest1 2011-03-17 14:24:48

+0

我会明天研究它并为你找到解决方案。你可以尝试做的一件事是在ns.Folders.Items中列出值,看看你实际工作的是什么。至于附件SaveAsFile,我假设你已经添加了Outlook引用已经得到了这一点。我会在对象浏览器中查看它是否应该在那里,并检查您是否获得了所需的正确的Attachment对象类型。我在这台机器上没有Office,否则我会更具体。你使用的是哪个版本的Office? – Todd 2011-03-18 03:09:42

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

戴维斯罗杰斯