[英]Download outlook attachments with vba according to subject does not work on other computers
該代碼從“A”列中的 Excel 中讀取行,在 Outlook 中查找它們,並將附件下載到范圍(“E3”)內的文件夾中,該范圍因計算機而異。
但是,在我的電腦上它運行完美,在我同事的電腦上它不下載文件。
Sub Descarga()
Dim it, at As Variant, t As Long
Dim olApp As Outlook.Application
Dim olNS As Outlook.Namespace
Dim olFolder As Outlook.MAPIFolder
Dim olItem As Object
Dim mailitem As Outlook.mailitem
Dim olAtt As Outlook.Attachment
Set olApp = New Outlook.Application
Set olNS = olApp.GetNamespace("MAPI")
Set olFolder = olNS.GetDefaultFolder(olFolderInbox)
For Each it In CreateObject("outlook.application").GetNamespace("MAPI").GetDefaultFolder(6).Items
For t = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(it.Subject, Cells(t, 1)) Then
For Each at In it.Attachments
at.SaveAsFile (Range("E3")) & "\" & at.DisplayName 'Range("E3") is the path
Next
End If
Next
Next
End Sub
首先,不需要為文件夾中的每個項目創建一個新的 Outlook Application
class (即使沒有創建新的實例,為了您的方便和干凈的代碼,打破長長的屬性和方法調用鏈也是有意義的):
For Each it In CreateObject("outlook.application").GetNamespace("MAPI").GetDefaultFolder(6).Items
相反,使用Find
/ FindNext
或Restrict
方法來查找符合您的主題行條件的項目。 在以下文章中閱讀更多關於它們的信息:
如果您需要處理來自不同文件夾的項目,您還可以考慮使用Application
class 的AdvancedSearch
方法。在 Outlook 中的高級搜索中以編程方式閱讀有關此方法的更多信息:C#、VB.NET 一文。 使用 Outlook 中的AdvancedSearch
方法的主要好處是:
AdvancedSearch
方法會在后台自動運行它。Restrict
和Find
/ FindNext
方法可以應用於特定的Items
集合(請參閱 Outlook 中Folder
class 的Items
屬性)。Store
類的IsInstantSearchEnabled
屬性)。Search
class 的Stop
方法停止搜索過程。 最后,我建議確保傳遞給SaveAsFile
方法的文件路徑有效並且不包含禁止的符號:
at.SaveAsFile (Range("E3")) & "\" & at.DisplayName 'Range("E3") is the path
首先,不要使用at.DisplayName
- 使用at.FileName
。
其次,保存前檢查附件類型 - OOM 不會讓您保存附件,例如,嵌入的 OLE 對象,您需要先檢查附件類型。
For Each at In it.Attachments
if at.Type = 1 Then 'olByValue
at.SaveAsFile (Range("E3")) & "\" & at.FileName 'Range("E3") is the path
End If
Next
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.