簡體   English   中英

根據主題下載outlook附件vba在其他電腦上不起作用

[英]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 / FindNextRestrict方法來查找符合您的主題行條件的項目。 在以下文章中閱讀更多關於它們的信息:

如果您需要處理來自不同文件夾的項目,您還可以考慮使用Application class 的AdvancedSearch方法。在 Outlook 中的高級搜索中以編程方式閱讀有關此方法的更多信息:C#、VB.NET 一文。 使用 Outlook 中的AdvancedSearch方法的主要好處是:

  • 搜索在另一個線程中執行。 您不需要手動運行另一個線程,因為AdvancedSearch方法會在后台自動運行它。
  • 可以在任何位置搜索任何項目類型:郵件、約會、日歷、便箋等,即超出某個文件夾的 scope。 RestrictFind / FindNext方法可以應用於特定的Items集合(請參閱 Outlook 中Folder class 的Items屬性)。
  • 完全支持 DASL 查詢(自定義屬性也可用於搜索)。 您可以在 MSDN 的過濾文章中閱讀更多相關信息。 為了提高搜索性能,如果為商店啟用了即時搜索,則可以使用即時搜索關鍵字(請參閱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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM