【问题标题】:Print mail item as pdf将邮件项目打印为 pdf
【发布时间】:2015-10-02 20:45:18
【问题描述】:

我正在尝试将 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 方法。

使用上述方法,我目前收到“未找到命名参数”错误。我在 Internet 上查看了其他地方,但似乎找不到解决方案。

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    我结合使用KrishnaEugene Astafiev 发布的答案来生成以下代码,该代码现在将从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 属性的工作代码。

    【讨论】:

    • 谢谢。无论如何让这个也显示标题? (即从:,到:等)
    • 同样的问题!你找到答案了吗?
    【解决方案2】:

    这只有在原始电子邮件被格式化为支持单词转换的文档时才有效。

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

    【讨论】:

      【解决方案3】:

      无需使用 MailItem 类的 SaveAs 方法。 Inspector 类的 WordEditor 属性返回代表消息正文的 Word Document 类的实例。您可以直接从 Outlook 调用 Document 类的 ExportAsFixedFormat 方法,避免任何磁盘操作。请参阅Chapter 17: Working with Item Bodies 了解更多信息。

      【讨论】:

      • 嗨,尤金,非常感谢您的提示。我正在尝试使其正常工作,并且在以下代码行中收到“对象变量或未设置块变量”:Set objDoc = outApp.ActiveInspector.WordEditor。 outApp 已设置为Set outApp = CreateObject("Outlook.Application")(出于某种原因,如果我尝试提前绑定,我的 VBE 总是会调试,这就是我使用后期绑定的原因)。提前致谢。
      • 现在可以使用了。但感谢您告知我这种处理邮件的方法。
      【解决方案4】:

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

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

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

      第 2 步使用词自动化,(参考词对象 14.0) 使用 fixedformat 将其转换为 pdf。

      Document.ExportAsFixedFormat "somefile.pdf", 17
      

      【讨论】:

      • 为什么需要将项目保存在光盘上?
      • 标题信息呢?发件人日期?这真的很重要,它不会在 pdf 中打印出来
      猜你喜欢
      • 1970-01-01
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-21
      • 2013-10-25
      • 1970-01-01
      相关资源
      最近更新 更多