2012-07-02 74 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键可以在这些情况下非常有帮助。

相关问题