VBA代码,用于将Outlook电子邮件中的附件(excel文件)另存为附件

VBA代码,用于将Outlook电子邮件中的附件(excel文件)另存为附件,vba,outlook,Vba,Outlook,我有将邮件附件保存在特定Outlook文件夹中的代码 如果电子邮件有附件,我的脚本将起作用,但如果电子邮件是作为带有附件的附件发送的,则脚本将不起作用 在这种情况下,我的电子邮件包含其他作为附件的电子邮件(来自自动转发规则)。然后,嵌入的电子邮件附件包含excel文件 请看下面我的当前状态: 任何帮助都将不胜感激 下面的代码使用这种方法将电子邮件作为附件处理 测试附件是否为电子邮件(如果文件名以msg结尾) 如果附件是一条消息,它将另存为“C:\temp\KillMe.msg” CreateIt

我有将邮件附件保存在特定Outlook文件夹中的代码

如果电子邮件有附件,我的脚本将起作用,但如果电子邮件是作为带有附件的附件发送的,则脚本将不起作用

在这种情况下,我的电子邮件包含其他作为附件的电子邮件(来自自动转发规则)。然后,嵌入的电子邮件附件包含excel文件

请看下面我的当前状态:


任何帮助都将不胜感激

下面的代码使用这种方法将电子邮件作为附件处理

  • 测试附件是否为电子邮件(如果文件名以msg结尾)
  • 如果附件是一条消息,它将另存为
    “C:\temp\KillMe.msg”
  • CreateItemFromTemplate
    用于访问作为新消息保存的文件(msg2)
  • 然后,代码处理此临时消息,将附件剥离到
    fsSaveFolder
  • 如果附件不是邮件,则会根据您当前的代码将其提取
  • 请注意,由于我没有您的olFolder结构、Windoes版本、
    Outlook
    variable等,因此我不得不添加到我自己的文件路径和Outlook文件夹中进行测试。你需要改变这些

       Sub SaveOlAttachments()
    
        Dim olFolder As Outlook.MAPIFolder
        Dim msg As Outlook.MailItem
        Dim msg2 As Outlook.MailItem
        Dim att As Outlook.Attachment
        Dim strFilePath As String
        Dim strTmpMsg As String
        Dim fsSaveFolder As String
    
        fsSaveFolder = "C:\test\"
    
        'path for creating attachment msg file for stripping
        strFilePath = "C:\temp\"
        strTmpMsg = "KillMe.msg"
    
       'My testing done in Outlok using a "temp" folder underneath Inbox
        Set olFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
        Set olFolder = olFolder.Folders("Temp")
        If olFolder Is Nothing Then Exit Sub
    
        For Each msg In olFolder.Items
            If msg.Attachments.Count > 0 Then
            While msg.Attachments.Count > 0
            bflag = False
                If Right$(msg.Attachments(1).FileName, 3) = "msg" Then
                    bflag = True
                    msg.Attachments(1).SaveAsFile strFilePath & strTmpMsg
                    Set msg2 = Application.CreateItemFromTemplate(strFilePath & strTmpMsg)
                End If
                If bflag Then
                    sSavePathFS = fsSaveFolder & msg2.Attachments(1).FileName
                    msg2.Attachments(1).SaveAsFile sSavePathFS
                    msg2.Delete
                Else
                    sSavePathFS = fsSaveFolder & msg.Attachments(1).FileName
                    msg.Attachments(1).SaveAsFile sSavePathFS
                End If
                msg.Attachments(1).Delete
                Wend
                 msg.Delete
            End If
        Next
        End Sub
    

    工作完美!我唯一更改的是:Application.CreateItemFromTemplate(strFilePath&strTmpMsg)到Outlook.CreateItemFromTemplate(strFilePath&strTmpMsg)
       Sub SaveOlAttachments()
    
        Dim olFolder As Outlook.MAPIFolder
        Dim msg As Outlook.MailItem
        Dim msg2 As Outlook.MailItem
        Dim att As Outlook.Attachment
        Dim strFilePath As String
        Dim strTmpMsg As String
        Dim fsSaveFolder As String
    
        fsSaveFolder = "C:\test\"
    
        'path for creating attachment msg file for stripping
        strFilePath = "C:\temp\"
        strTmpMsg = "KillMe.msg"
    
       'My testing done in Outlok using a "temp" folder underneath Inbox
        Set olFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
        Set olFolder = olFolder.Folders("Temp")
        If olFolder Is Nothing Then Exit Sub
    
        For Each msg In olFolder.Items
            If msg.Attachments.Count > 0 Then
            While msg.Attachments.Count > 0
            bflag = False
                If Right$(msg.Attachments(1).FileName, 3) = "msg" Then
                    bflag = True
                    msg.Attachments(1).SaveAsFile strFilePath & strTmpMsg
                    Set msg2 = Application.CreateItemFromTemplate(strFilePath & strTmpMsg)
                End If
                If bflag Then
                    sSavePathFS = fsSaveFolder & msg2.Attachments(1).FileName
                    msg2.Attachments(1).SaveAsFile sSavePathFS
                    msg2.Delete
                Else
                    sSavePathFS = fsSaveFolder & msg.Attachments(1).FileName
                    msg.Attachments(1).SaveAsFile sSavePathFS
                End If
                msg.Attachments(1).Delete
                Wend
                 msg.Delete
            End If
        Next
        End Sub