将 Outlook 消息保存到 VBA 在本地驱动器中创建的文件夹中
Posted
技术标签:
【中文标题】将 Outlook 消息保存到 VBA 在本地驱动器中创建的文件夹中【英文标题】:Saving an Outlook message to a folder created in local drive by VBA 【发布时间】:2017-06-10 09:17:44 【问题描述】:我用 VBA 创建了一个文件夹。
Sub ExtractEmail()
Dim OlApp As Outlook.Application
Set OlApp = New Outlook.Application
Dim Mailobject As Object
Dim Email As String
Dim NS As NameSpace
Dim Folder As MAPIFolder
Set OlApp = CreateObject("Outlook.Application")
Dim fso As Object
Dim fldrname As String
Dim fldrpath As String
' Setup Namespace
Set NS = ThisOutlookSession.Session
' Display select folder dialog
Set Folder = NS.PickFolder
' Create Folder File
Set fso = CreateObject("Scripting.FileSystemObject")
' loop to read email address from mail items.
For Each Mailobject In Folder.Items
fldrname = Mailobject.To
fldrpath = "\\abc\" & fldrname
If Not fso.folderexists(fldrpath) Then
fso.createfolder (fldrpath)
End If
Set objCopy = Mailobject.Copy
objCopy.SaveAs fldrpath, olMSG
Next
Set OlApp = Nothing
Set Mailobject = Nothing
End Sub
当我尝试使用时
Mailobject.SaveAs fldrpath, olMSG
要将邮件保存到文件夹中,我无法写入文件。
右击文件夹,然后在快捷菜单上点击属性查看文件夹的权限,我看到属性为只读。
您能帮我找出替代方案吗?
【问题讨论】:
你能发布完整的代码吗? 如果它是只读的,那么您可能需要考虑将权限更改为读写? 【参考方案1】:您必须将完全限定的文件名传递给 SaveAs。您传递的只是文件夹名称:
objCopy.SaveAs fldrpath & "\test.msg", olMSG
【讨论】:
非常感谢!这行得通。 :) 你能否帮助我了解如何使邮件主题名称动态化。我使用了以下语法 Subjectname = Mailobject.Subject 但无法放入您提到的“\test.msg”。 objCopy.SaveAs fldrpath & "\" & objCopy.Subject,olMSG。但是您需要确保没有非法(对于字段名称)字符,例如“:”等。【参考方案2】:fldrpath = "\\abc\" & fldrname &
"\"
savepath = fldrpath & Mailobject.Subject & Format(Now(), "yyyy-mm-dd-
hhNNss")
savepath = savepath & ".msg"
If Not fso.folderexists(fldrpath) Then
fso.createfolder (fldrpath)
End If
Set objCopy = Mailobject.Copy
objCopy.SaveAs savepath, olMSG
【讨论】:
此代码在最后一行抛出错误操作失败。任何人都可以找出相同的解决方法吗?我正在尝试复制邮件并将其粘贴到保存路径中。以上是关于将 Outlook 消息保存到 VBA 在本地驱动器中创建的文件夹中的主要内容,如果未能解决你的问题,请参考以下文章
OUTLOOK VBA 收到新邮件后自动保存包含特定字符的附件到指定文件夹
Outlook 中的 VBA:“Microsoft Outlook 已停止工作”消息