2017-04-26 28 views
0

我有這樣的代碼,節省附件到一個特定的地方並將其重命名爲「name.xls」保存和重命名靜態名Outlook附件

Public Sub saveAttachtoDisk(itm As Outlook.MailItem) 
Dim objAtt As Outlook.Attachment 
Dim saveFolder As String 
saveFolder = "C:\Users\acheng\Desktop" 
    For Each objAtt In itm.Attachments 
      objAtt.SaveAsFile saveFolder & "\name.xls" 
      Set objAtt = Nothing 
    Next 
End Sub 

一名用戶沒有在這個線程具有非常類似的東西的.csv文件:

VBA Outlook - Rename attachments and save to folder

我做同樣的事情,除了用.xls文件。

我的腳本保存並重命名文件,但是當我嘗試打開文件時,它說:''name.xls'的格式與文件擴展名指定的格式不同,請確認它沒有損壞... 「

一旦我點擊是,它會打開,所有的數據都是奇怪的符號。如果我將&'\ name.xls'替換爲'& objAtt.DisplayName',它會正確保存文件的原始名稱。

我有雙重檢查,這是一個.xls文件。找出更普遍的東西(以便相同的腳本適用於.xls .xlsx和.xlsm)也會非常有幫助,但不是優先考慮的事情。

回答

1

如果有多個附件,您的代碼可能會將Excel附件替換爲其他附件之一。

嘗試這樣的事情,找出

Public Sub saveAttachtoDisk(itm As Outlook.MailItem) 
    Dim objAtt As Outlook.Attachment 
    Dim saveFolder As String 
    Dim i as Integer 

    i=0 
    saveFolder = "C:\Users\acheng\Desktop" 
    For Each objAtt In itm.Attachments 
      i = i + 1 
      objAtt.SaveAsFile saveFolder & "\name" & i & ".xls" 
      Set objAtt = Nothing 
    Next 
End Sub 

你應該在此處添加一些驗證。假設所有附件都是Excel文件是一個很大的風險。

+0

這工作!問題是,雖然我認爲電子郵件只有1個附件,但發件人電子郵件簽名中有一張小圖片。該腳本首先將附件保存爲name.xls,然後用圖片覆蓋該附件。通過驗證是什麼意思,以及如何過濾它以便它只下載excel文件附件? – user7926636

+0

@ user7926636使用案例選擇僅保存特定的文件類型請參閱http://stackoverflow.com/a/43180639/4539709 – 0m3r