2015-09-07 121 views
0

這是用於從Outlook收件箱檢索電子郵件並存儲其附件的腳本。用於從Outlook中檢索電子郵件的腳本

問題是無法正常工作。它能夠從未讀電子郵件中收集附件並將它們存儲到SavePath中,但不知何故,它在閱讀三封電子郵件時正在停止。

奇怪的是,它能夠在再次執行時收集剩餘的電子郵件,但不是所有剩餘的未讀電子郵件。

例如:我在收件箱中有6封未讀電子郵件,第一次只執行3封電子郵件並收集其附件。第二次執行時,它會讀取下2封電子郵件。第三次執行時,剩下的電子郵件被讀取。

我無法弄清楚發生了什麼,爲什麼不是所有的電子郵件一次被讀取。

Dim SavePath 
Dim Subject 
Dim FileExtension 

SavePath = "C:\IN\" 
Subject = "'Transfer File'" 
FileExtension = "ARmessage" 

Set objOutlook = CreateObject("Outlook.Application") 
Set objNamespace = objOutlook.GetNamespace("MAPI") 
Set objFolder = objNamespace.GetDefaultFolder(6) 'Inbox 

Set colItems = objFolder.Items 
Set colFilteredItems = colItems.Restrict("[Unread]=true") 
Set colFilteredItems = colFilteredItems.Restrict("[Subject] = " & Subject) 

For Each objMessage In colFilteredItems 
    intCount = objMessage.Attachments.Count 
    If intCount > 0 Then 
     For i = 1 To intCount 
      ' if right(Ucase(objMessage.Attachments.Item(i)),9) = FileExtension then 
       objMessage.Attachments.Item(i).SaveAsFile SavePath & _ 
        objMessage.Attachments.Item(i).FileName 
      ' End If 
     Next 
     objMessage.Unread = False 
    End If 
Next 

回答

1

不要使用「每個」與您正在改變的集合 - 限制集合是動態的,當你標記的郵件閱讀,收集的變化。使用向下「for」循環:

dim k 
For k = colFilteredItems.Count to 1 step -1 
    set objMessage = colFilteredItems.Item(k) 
    ... 
next 
+0

感謝您的回覆德米特里。應用您的建議後,它現在啓動「語法錯誤」消息。 – equisde

+0

對不起,我更新了上面的代碼片段。 –

+0

現在我得到這個錯誤:'無效的循環控制變量' – equisde

相關問題