我正在尝试在 Outlook 中获得 VBA 宏,该宏会将电子邮件的附件保存到特定文件夹,并将接收日期添加到文件名中。
我的谷歌搜索使我到目前为止:
Public Sub saveAttachtoDisk (itm As Outlook.MailItem)
Dim objAtt As Outlook.Attachment
Dim saveFolder As String
Dim dateFormat As String
saveFolder = "C:\Temp\"
dateFormat = Format(Now, "yyyy-mm-dd H-mm")
For Each objAtt In itm.Attachments
objAtt.SaveAsFile saveFolder & "\" & dateFormat & objAtt.DisplayName
Set objAtt = Nothing
Next
End Sub
首先显而易见的是,它将当前时间应用于文件名,而不是接收的时间,但是我似乎无法更改它。我的理论是 Outlook.Attachment 没有ReceivedTime
,并且电子邮件本身必须被引用。
其次,这似乎根本不起作用,哈!我开始修补的第一天就可以了,但是之后就停止了保存文件。
6 回答
这是我的“保存附件”脚本。您选择要从中保存附件的所有邮件,它将在其中保存一个副本。它还会将文本添加到邮件正文中,指示附件的保存位置。您可以轻松地更改文件夹名称以包括日期,但是在开始保存文件之前,需要确保该文件夹存在。
参见
ReceivedTime
属性http://msdn.microsoft.com/en-us/library/office/aa171873(v=office.11).aspx
您在“另存为文件”行的
C:\Temp\
末尾添加了另一个\
。可能是个问题。添加路径分隔符之前,请先进行测试。您尚未设置
objAtt
,因此不需要“Set objAtt = Nothing
”。如果有的话,它将在End Sub
之前而不在循环中。回复:我开始修补的第一天就可以了,但是之后就停止了保存文件。
添加了简单的代码以可读的 date-time 标记保存。
使用sync2pst可以将 Outlook 中的所有数据与所有设备同步,如下所示:
您只需要购买 1 个许可证:将 pst 文件保存在网络上的一台计算机上(我们将此 PC 称为“服务器”)。
创建计划的任务,以使“服务器”上的 pst 文件与所有设备上的所有 pst 文件同步,无论哪个设备首先下载了电子邮件(您都需要具备一定的 dos 编程知识,才能绕过在同步时打开的 pst 文件) 。
将所有附件保存在所有设备上相同位置的同一 skydrive 文件夹中(e.g. e: skydriveattachments)
在所有设备上使用下面的代码保存附件(如上所述更改路径)
对所有帐户使用“仅一个 PST-file **”,创建文件夹,子文件夹等...
在 VBA 中:请参阅“
microsoft scripting runtime
'extra/references...”这是代码
我实际上在发布后不久就解决了这个问题,但是未能发布我的解决方案。老实说我不记得了。但是,当我得到一个面临相同挑战的新项目时,我不得不 re-visit 完成任务。
我使用 Outlook.MailItem 的 ReceivedTime 属性来获取 time-stamp,因此我可以将其用作每个文件的唯一标识符,这样它们就不会彼此覆盖。
非常感谢其他解决方案,其中许多解决方案超越了:)
您的问题有 2 个任务要执行。首先将电子邮件附件提取到文件夹,然后使用特定名称保存或重命名。
如果您的搜索可以分为 2 个搜索,则您会获得更多匹配。我可以参考一页说明如何将附件保存到系统文件夹<1>的页面。
如果发现使用特定名称保存附件,请张贴任何页面或代码。