使用MailItem.SaveAs
在Outlook VBA中保存电子邮件很容易但我没有看到任何保存其他详细信息的选项,例如作者和类别。
第三方程序MessageSave允许以.msg格式保存包含类别和作者的邮件。在Windows资源管理器中,作者和类别列显示与Outlook中相同的信息。
有人知道如何使用Outlook VBA保存邮件,包括这些附加信息吗?
我买了MessageSave,这是一个很好的程序,但他们不允许在VBA中使用他们的保存功能。唯一的解决方法是让MessageSave在消息到达时保存消息。在特定文件夹中。如果有必要,我可以使用此功能,但这只是一种解决方法。
答案 0 :(得分:0)
这是我遵循的流程:(win7 64)
网络搜索" windows vba设置扩展文件属性"
网络搜索:" DSOFile.OleDocumentProperties"
hit microsoft:Dsofile.dll文件允许您在未安装Office时编辑Office文档属性
这不是一个错字......它以" when-yo"
结束下载:DsoFileSetup_KB224351_x86.exe
使用7-zip程序打开DsoFileSetup_KB224351_x86.exe(来自7-zip.org)
将dssoile.dll从DsoFileSetup_KB224351_x86.exe(使用7-zip)复制到文件夹桌面(在此示例中名为" testFiles")(这可能是任何地方......也许是windows system32或syswow64 ..我只在桌面上试过了)
以管理员身份打开命令提示符窗口
导航到包含dsofile.dll的文件夹
执行以下命令:regsvr32 dsofile.dll
应该收到成功确认
启动outlook ... vba编辑器...工具...参考
并找到" DSO OLE文档属性读取器2.1"并选中左侧的方框
回到vba编辑器...创建新模块
粘贴如下:(这只是一个最小的测试脚本)
Sub extendedProperties()
Dim objFile As OleDocumentProperties
Set objFile = CreateObject("DSOFile.OleDocumentProperties")
objFile.Open ("C:\Users\js\Desktop\testFiles\myMessage.msg") ' adjust to match your system
objFile.SummaryProperties.Subject = "My Subject"
objFile.Save
Set objFile = Nothing
End Sub
复制(拖放)电子邮件" myMessage"从outlook到文件夹(在本例中为桌面)
右键单击文件夹列标题...点击更多...查找"主题" ... 单击复选框
运行脚本
主题栏应包含"我的主题"在myMessage.msg旁边(或者你的消息被命名)
可能有一种更简单的方法......也许Windows PowerShell有一个可以从vba调用的命令
答案 1 :(得分:-1)
这是一个更实用的脚本
没有错误检查
不检查重复的消息名称
不检查非法文件名(":"字符除外)
只需在任何outlook文件夹中选择一堆电子邮件并运行此
' make sure you have a reference to "DSO OLE Document Properties Reader"
Sub extendedProperties()
Dim msg As mailItem
Dim objFile As OleDocumentProperties
' Set objFile = CreateObject("DSOFile.OleDocumentProperties")
Set objFile = New OleDocumentProperties
Dim fileName As String
Dim subjectText As String
' !!!!!!!! select a bunch of messages before running this !!!!!!!!
For Each msg In ActiveExplorer.Selection
subjectText = Replace(msg.Subject, ":", "_") ' get rid of illegal file name character (there are others)
' adjust the destination folder for your liking
fileName = "C:\Users\js\Desktop\testFiles\" & subjectText & ".msg"
Debug.Print fileName
msg.SaveAs fileName
objFile.Open fileName
objFile.SummaryProperties.Subject = "My Subject"
'objFile.Save
objFile.Close True ' save and close !!!!! duplicate filenames get overwritten !!!!!
' stop ' uncomment this line and the code will stop. press F5 to run, F8 to single-step
Next msg
Set msg = Nothing
Set objFile = Nothing
End Sub