按顺序保存附件
Save attachments in order
我正在尝试 运行 通过 Outlook 中的规则将附件保存到文件夹中的宏。
电子邮件有时有多个附件。我试图按顺序保存文件,例如,如果我查看电子邮件,我可以很容易地看到与之对应的文件。
我在网上找到了以下内容:
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "C:\PathToDirectory\"
Dim dateFormat As String
dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd Hmm ")
For Each objAtt In itm.Attachments
objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
Next
End Sub
我试过玩 objatt.displayname
但运气不好。我已经尝试分配新名称并创建一个新循环来命名文件 File 1 、 File 2 等等,但是当我这样做时,我丢失了文件扩展名。
更新版本:
Option Explicit
Public Sub save_attachments(itm As Outlook.MailItem)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strExt As String
Dim i As Long
Dim savefolder As String
i = 1
savefolder = "C:\Users\w\desktop\test"
For Each objAtt In itm.Attachments
i = i + 1
strExt = fso.GetExtensionName(objAtt.DisplayName)
objAtt.SaveAsFile savefolder & "\" & dateFormat & " - File " & i & "." & strExt
Next
End Sub
您可以在现有的子例程中执行类似的操作。这将增加一个 "File"
数字并仍然保留扩展名。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strExt As String
Dim i As Long
For Each objAtt In itm.Attachments
i = i + 1
strExt = fso.GetExtensionName(objAtt.DisplayName)
objAtt.SaveAsFile saveFolder & "\" & dateFormat & " - File " & i & "." & strExt
Next
一段时间以来我一直在使用类似的解决方案。我最近添加了这种安静的编码以避免也保存嵌入的图像:
Extension = LCase$(Right$(FileNm, 3))
If Extension = "png" Or Extension = "gif" Or Extension = "jpg" Then
*** Save File ***
Endif
当然假设您没有收到要保存的图像文件。
如果将它放在 For Next 循环之前,您可以 select 多封电子邮件:
For Each Item In Application.ActiveExplorer.Selection
当然你也必须把你的 i = i + 1 放在别的地方。
您也可以在电子邮件中将 link 添加到您的文件中:
FileNameb = Replace(filename, " ", "%20")
Link = "<a href=" + FileNameb + ">" + filename + "</a><br />"
Item.HTMLBody = Item.HTMLBody + Link
这将从邮件中删除附件并保存:
For i = 1 To Item.Attachments.Count
Item.Attachments.Remove 1: 'Remove all attachments
Next i
Item.UnRead = False: 'Mark e mail as read
Item.Save
玩得开心!
我正在尝试 运行 通过 Outlook 中的规则将附件保存到文件夹中的宏。
电子邮件有时有多个附件。我试图按顺序保存文件,例如,如果我查看电子邮件,我可以很容易地看到与之对应的文件。
我在网上找到了以下内容:
Public Sub saveAttachtoDisk(itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
saveFolder = "C:\PathToDirectory\"
Dim dateFormat As String
dateFormat = Format(itm.ReceivedTime, "yyyy-mm-dd Hmm ")
For Each objAtt In itm.Attachments
objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
Next
End Sub
我试过玩 objatt.displayname
但运气不好。我已经尝试分配新名称并创建一个新循环来命名文件 File 1 、 File 2 等等,但是当我这样做时,我丢失了文件扩展名。
更新版本:
Option Explicit
Public Sub save_attachments(itm As Outlook.MailItem)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strExt As String
Dim i As Long
Dim savefolder As String
i = 1
savefolder = "C:\Users\w\desktop\test"
For Each objAtt In itm.Attachments
i = i + 1
strExt = fso.GetExtensionName(objAtt.DisplayName)
objAtt.SaveAsFile savefolder & "\" & dateFormat & " - File " & i & "." & strExt
Next
End Sub
您可以在现有的子例程中执行类似的操作。这将增加一个 "File"
数字并仍然保留扩展名。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim strExt As String
Dim i As Long
For Each objAtt In itm.Attachments
i = i + 1
strExt = fso.GetExtensionName(objAtt.DisplayName)
objAtt.SaveAsFile saveFolder & "\" & dateFormat & " - File " & i & "." & strExt
Next
一段时间以来我一直在使用类似的解决方案。我最近添加了这种安静的编码以避免也保存嵌入的图像:
Extension = LCase$(Right$(FileNm, 3))
If Extension = "png" Or Extension = "gif" Or Extension = "jpg" Then
*** Save File ***
Endif
当然假设您没有收到要保存的图像文件。
如果将它放在 For Next 循环之前,您可以 select 多封电子邮件:
For Each Item In Application.ActiveExplorer.Selection
当然你也必须把你的 i = i + 1 放在别的地方。
您也可以在电子邮件中将 link 添加到您的文件中:
FileNameb = Replace(filename, " ", "%20")
Link = "<a href=" + FileNameb + ">" + filename + "</a><br />"
Item.HTMLBody = Item.HTMLBody + Link
这将从邮件中删除附件并保存:
For i = 1 To Item.Attachments.Count
Item.Attachments.Remove 1: 'Remove all attachments
Next i
Item.UnRead = False: 'Mark e mail as read
Item.Save
玩得开心!