2012-07-02 109 views
1

我需要保存在收件箱中的特定子文件夾(每日最終)中的outlook郵件內收到的excel附件,並知道該子郵件中的所有電子郵件都將包含該附件。我有以下使用Excel VBA的例子,但它不工作非常和善advie我如何將Outlook 2007收件箱中定義的子文件夾中收到的電子郵件中附帶的excel文件保存到Windows上的文件夾?

Sub SaveAttachmentsToFolder() 
' This Outlook macro checks a named subfolder in the Outlook Inbox 
' (here the "daily final" folder) for messages with attached 
' files of a specific type (here file with an "xls" extension) 
' and saves them to disk. Saved files are timestamped. The user 
' can choose to view the saved files in Windows Explorer. 
' NOTE: make sure the specified subfolder and save folder exist 
' before running the macro. 
On Error GoTo SaveAttachmentsToFolder_err 
' Declare variables 
Dim ns As Namespace 
Dim Inbox As MAPIFolder 
Dim SubFolder As MAPIFolder 
Dim Item As Object 
Dim Atmt As Attachment 
Dim FileName As String 
Dim i As Integer 
Dim varResponse As VbMsgBoxResult 
Set ns = GetNamespace("MAPI") 
Set Inbox = ns.GetDefaultFolder(olFolderInbox) 
Set SubFolder = Inbox.Folders("daily final") ' Enter correct subfolder 
name. 
i = 0 
' Check subfolder for messages and exit of none found 
If SubFolder.Items.Count = 0 Then 
MsgBox "There are no messages in the Sales Reports folder.", 
vbInformation , _ 
"Nothing Found" 
Exit Sub 
End If 
' Check each message for attachments 
For Each Item In SubFolder.Items 
For Each Atmt In Item.Attachments 
' Check filename of each attachment and save if it has "xls" extension 
If Right(Atmt.FileName, 3) = "xls" Then 
' This path must exist! Change folder name as necessary. 
FileName = "C:\Email Attachments\" & _ 
Format(Item.CreationTime, "yyyymmdd_hhnnss_") & 
Atmt.FileName 
Atmt.SaveAsFile FileName 
i = i + 1 
End If 
Next Atmt 
Next Item 
' Show summary message 
If i > 0 Then 
varResponse = MsgBox("I found " & i & " attached files." _ 
& vbCrLf & "I have saved them into the C:\Email Attachments folder." _ 
& vbCrLf & vbCrLf & "Would you like to view the files now?" _ 
, vbQuestion + vbYesNo, "Finished!") 
' Open Windows Explorer to display saved files if user chooses 
If varResponse = vbYes Then 
Shell "Explorer.exe /e,C:\Email Attachments", vbNormalFocus 
End If 
Else 
MsgBox "I didn't find any attached files in your mail.", 
vbInformation , "Finished!" 
End If 
' Clear memory 
SaveAttachmentsToFolder_exit: 
Set Atmt = Nothing 
Set Item = Nothing 
Set ns = Nothing 
Exit Sub 
' Handle Errors 
SaveAttachmentsToFolder_err: 
MsgBox "An unexpected error has occurred." _ 
& vbCrLf & "Please note and report the following information." _ 
& vbCrLf & "Macro Name: GetAttachments" _ 
& vbCrLf & "Error Number: " & Err.Number _ 
& vbCrLf & "Error Description: " & Err.Description _ 
, vbCritical, "Error!" 
Resume SaveAttachmentsToFolder_exit 
End Sub 
+0

我需要在Excel VBA中執行此代碼,而不是Outlook VBA。 – user1317100

+1

請解釋「不工作」。您應該包含停止工作的行以及您收到的任何錯誤消息。 – Fionnuala

+0

紅色的所有行給出語法錯誤。在此先感謝您的支持 – user1317100

回答

1

看來你已經剪切和粘貼從一個網站,但你不熟悉的VBA。將代碼粘貼到VBA代碼中時,它會突出顯示存在問題的行。然後,你運用你的知識來解決這些問題。例如,這條線從上面應該有一個說法:

MsgBox "There are no messages in the Sales Reports folder.", 
vbInformation , _ 
"Nothing Found" 

像這樣:

MsgBox "Message", buttons, "Title" 

你可以把一個聲明三行喜歡你,但你必須使用續行字符(_),你只有一個,你需要兩個。

MsgBox "There are no messages in the Sales Reports folder.", _ 
vbInformation , _ 
"Nothing Found" 

這裏

FileName = "C:\Email Attachments\" & _ 
Format(Item.CreationTime, "yyyymmdd_hhnnss_") & 

你有一個額外&。一個聲明不能結束&

F1鍵可以在這些情況下非常有幫助。

相關問題