0

此代码复制指定文件夹中的所有 .xls 附件。

我想要来自特定电子邮件地址的邮件或具有特定主题的邮件的附件。

Sub GetAttachments() 
' This Outlook macro checks a the Outlook Inbox for messages
' with attached files (of any type) and saves them to disk.
' NOTE: make sure the specified save folder exists before
' running the macro.

On Error GoTo GetAttachments_err

' Declare variables
Dim ns As NameSpace
Dim Inbox As MAPIFolder
Dim Item As Object
Dim Atmt As Attachment
Dim FileName As String
Dim i As Integer

Set ns = GetNamespace("MAPI")
Set Inbox = ns.GetDefaultFolder(olFolderInbox)
i = 0

' Check Inbox for messages and exit of none found
If Inbox.Items.Count = 0 Then
    MsgBox "There are no messages in the Inbox.", vbInformation, _
        "Nothing Found"
    Exit Sub
End If

' Check each message for attachments
For Each Item In Inbox.Items ' Save any attachments found
    For Each Atmt In Item.Attachments
        ' This path must exist! Change folder name as necessary.
        FileName = "D:\New Folder\" & Atmt.FileName
        Atmt.SaveAsFile FileName
        i = i + 1
    Next Atmt
Next Item

' Show summary message
If i > 0 Then
    MsgBox "I found " & i & " attached files." _
    & vbCrLf & "I have saved them into the C:\Email Attachments folder." _
    & vbCrLf & vbCrLf & "Have a nice day.", vbInformation, "Finished!"
Else
    MsgBox "I didn't find any attached files in your mail.", vbInformation, "Finished!"
End If

' Clear memory GetAttachments_exit:
Set Atmt = Nothing
Set Item = Nothing
Set ns = Nothing
Exit Sub

' Handle errors
GetAttachments_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 GetAttachments_exit
End Sub

Sub SaveAttachmentsToFolder()
' This Outlook macro checks a named subfolder in the Outlook Inbox
' (here the "Sales Reports" 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("Sales Reports")

    ' 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

此代码将收件箱中的所有 .xls 附件复制到指定文件夹。

我不想要所有的附件,只需要来自特定用户的......比如电子邮件或主题或类型。

4

1 回答 1

0

对GetAttachments过程的以下调整将仅从John Doe或主题包含Weekly Status Report的电子邮件附件中提取。

请注意我在您的文件保存操作附近添加的评论。除非您绝对确定不会遇到任何重复的文件名,否则您应该在文件名上附加一个日期戳,否则您将在每次保存具有重复名称的文件时覆盖文件。

Option Explicit
Option Compare Text

Sub GetAttachments() ' This Outlook macro checks a the Outlook Inbox for messages ' with attached files (of any type) and saves them to disk. ' NOTE: make sure the specified save folder exists before ' running the macro.
        On Error GoTo GetAttachments_err ' Declare variables
        Dim ns As NameSpace
        Dim Inbox As MAPIFolder
        Dim Item As Object
        Dim Atmt As attachment
        Dim FileName As String
        Dim i As Integer
        Set ns = GetNamespace("MAPI")
        Set Inbox = ns.GetDefaultFolder(olFolderInbox)
        i = 0 ' Check Inbox for messages and exit of none found
        If Inbox.Items.Count = 0 Then
            MsgBox "There are no messages in the Inbox.", vbInformation, _
                   "Nothing Found"
            Exit Sub
        End If ' Check each message for attachments
        For Each Item In Inbox.Items ' Save any attachments from specfic senders or subjects
            If TypeName(Item) = "MailItem" And (Item.SenderName = "John Doe" Or Item.Subject Like "*Weekly Status Report*") Then
                For Each Atmt In Item.Attachments
                ' This path must exist! Change folder name as necessary.
                    FileName = "D:\New Folder\" & Atmt.FileName             'CONSIDER WHETHER YOU WILL HAVE ANY FILES BY THE SAME NAME!!!
                    Atmt.SaveAsFile FileName
                    i = i + 1
                 Next Atmt
             End If
        Next Item ' Show summary message
        If i > 0 Then
            MsgBox "I found " & i & " attached files." _
            & vbCrLf & "I have saved them into the C:\Email Attachments folder." _
            & vbCrLf & vbCrLf & "Have a nice day.", vbInformation, "Finished!"
        Else
            MsgBox "I didn't find any attached files in your mail.", vbInformation, "Finished!"
        End If ' Clear memory GetAttachments_exit:
        Set Atmt = Nothing
        Set Item = Nothing
        Set ns = Nothing

GetAttachments_exit:
        Exit Sub

GetAttachments_err:
        ' Handle errors GetAttachments_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 GetAttachments_exit
End Sub

如果您需要评估大量发件人或主题,您可能需要考虑创建字典对象并检查电子邮件是否符合您的条件。

于 2013-03-29T16:04:41.373 回答