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