2011-06-30 227 views
1

我有以下vba代碼可以保存電子郵件中的附件。從Outlook電子郵件中提取msg附件

這適用於.docx,.jpg等,但我需要使用它來提取多個.msg附件,這些附件不起作用。

的代碼是

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

saveFolder = "C:\Test\" 
For Each objAtt In itm.Attachments 
stFileName = saveFolder & "\" & objAtt.DisplayName 
i = 0 
JumpHere: 
If Dir(stFileName) = "" Then 
objAtt.SaveAsFile stFileName 
Else 
i = i + 1 
stFileName = saveFolder & "\" & i & " - " & objAtt.DisplayName 
GoTo JumpHere 
End If 
Set objAtt = Nothing 
Next 
End Sub 

錯誤涉及行 - 如果迪爾(stFileName)= 「」 那

+0

你真的不應該在VBA中使用** GoTo語句!這裏是一個討論來說明:http://www.eggheadcafe.com/software/aspnet/32608532/goto-statement-in-vba.aspx – JMax

+0

謝謝 - 看起來像回到繪圖板... – Haribo83

+0

@ Haribo83:也許我們可以幫助您設計您想要做的事情。你能向我們解釋這部分代碼的目的嗎? – JMax

回答

1

按照我們的聊天,這裏是最後的代碼:

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

saveFolder = "C:\Test\" 
For Each objAtt In itm.Attachments 
    stFileName = saveFolder & objAtt.FileName 
    i = 0 
    'Loop to find the first available filename 
    Do While Dir(stFileName) <> "" 
    i = i + 1 
    stFileName = saveFolder & i & " - " & objAtt.FileName 
    Loop 
    objAtt.SaveAsFile stFileName 
Next 
End Sub 

問候,

最大

+0

+1但請注意'While ... Wend'已棄用。 VBA幫助:「Do ... Loop語句提供了一種更加結構化和靈活的方式來執行循環。」爲了「模擬」'While ... Wend',使用'Do While ... Loop'。 –

+0

感謝讓弗朗索瓦指出了我。我會編輯我的帖子來糾正它。 – JMax

相關問題