首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将.xls附件,特别是邮件复制到硬盘?

如何将.xls附件,特别是邮件复制到硬盘?
EN

Stack Overflow用户
提问于 2013-03-29 17:41:27
回答 1查看 1.2K关注 0票数 0

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

我想从邮件附件从特定的电子邮件地址或邮件与特定的主题。

代码语言:javascript
复制
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附件复制到指定的文件夹。

我不想要所有的附件,只需要从特定的users..like电子邮件或主题或类型。

EN

回答 1

Stack Overflow用户

发布于 2013-03-30 00:04:41

以下对GetAttachments程序的调整将仅从无名氏或主题包含每周状态报告的电子邮件的附件中提取。

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

代码语言:javascript
复制
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

如果您需要评估大量发件人或主题,您可能需要考虑创建dictionary objects并检查电子邮件是否符合您的标准。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15700755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档