将邮件项目打印为 pdf

Print mail item as pdf

我正在尝试将 Outlook 文件夹中的所有邮件项目保存为 PDF。

Sub pdfConversion()
    Dim outApp As Object, objOutlook As Object, objFolder As Object, myItems As Object, myItem As Object
    Dim psName As String, pdfName As String

    Set outApp = CreateObject("Outlook.Application")
    Set objOutlook = outApp.GetNamespace("MAPI")
    Set objFolder = objOutlook.GetDefaultFolder(olFolderInbox).Folders("PDF Conversion")
    Set myItems = objFolder.Items

    For Each myItem In myItems
        myItem.PrintOut copies:=1, preview:=False, ActivePrinter:="Adobe PDF", printtofile:=True, _
        collate:=True, prtofilename:="C:\Users\lturner\Documents\" & myItem.Subject & ".pdf"
    Next myItem
End Sub

我使用的是 Outlook 2007,它没有将邮件另存为 PDF 的选项,因此我正在尝试使用 .PrintOut 方法。

使用上面的方法我目前收到一个 "Named argument not found" 错误。我在互联网上的其他地方看过,但似乎找不到解决方案。

MailItem.Printout 不接受任何参数。它使用应用程序级别的默认设置。

我认为这里的解决方法是两步,

第一步 使用 MailItem.SaveAs "somefile.doc", olDoc 转换为 RTF 或文档

第 2 步使用单词自动化,(参考单词对象 14.0) 使用 fixedformat.

将其转换为 pdf
Document.ExportAsFixedFormat "somefile.pdf", 17

不需要使用 MailItem class 的 SaveAs 方法。 Inspector WordEditor 属性 class returns 代表邮件正文的 Word 文档 class 实例。您可以直接从 Outlook 调用文档 class 的 ExportAsFixedFormat 方法,避免任何磁盘操作。有关详细信息,请参阅 Chapter 17: Working with Item Bodies

我使用了 and 发布的答案的组合来生成下面的代码,它现在将从 myItem.

中生成一个 PDF 文档
Dim objDoc As Object, objInspector As Object
For Each myItem In myItems
    fileName = Replace(myItem.Subject, ":", "")
    Set objInspector = myItem.GetInspector
    Set objDoc = objInspector.WordEditor
    objDoc.ExportAsFixedFormat folderPath & fileName & ".pdf", 17
    Set objInspector = Nothing
    Set objDoc = Nothing
Next myItem

发布这个,以便将来偶然发现问题的任何人都可以看到使用 WordEditor 属性.

的工作代码

仅当原始电子邮件的格式为支持单词转换的文档时,这才有效。

例如,如果您尝试将自定义表单打印为 PDF,那么这将失败,因为 Inspector 将始终为 word editor 传回 NOTHING。