2011-03-16 286 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不會。這應該可以解決你的問題。

戴維斯羅傑斯