【问题标题】:Outlook Corrupts PDF When SaveAsFile Used使用 SaveAsFile 时 Outlook 损坏 PDF
【发布时间】:2019-06-26 07:50:14
【问题描述】:

当 PDF 文件到达我的收件箱时,我正在使用以下代码在 Outlook 中自动导出它们。但是,它保存的文件已损坏。 SaveAsFile 方法只接受一个参数 - 要保存到的文件路径 - 它在文档中没有说我可以传递文件类型。如何在不损坏文件的情况下保存这些 PDF 附件?

    Private WithEvents Items As Outlook.Items

    Private Sub Application_Startup()

        'Declaring Variables [BD]
        Dim oOutlook As Outlook.Application
        Dim oNameSpace As Outlook.NameSpace
        Dim oFolder As Outlook.MAPIFolder

        'Intializing Variables [BD]
        Set oOutlook = Outlook.Application
        Set oNameSpace = Application.GetNamespace("MAPI")

        Set oFolder = oNameSpace.GetDefaultFolder(olFolderInbox).Parent
        Set oFolder = oFolder.Folders("Produce Availability").Folders("Earls Organic")
        Set Items = oFolder.Items

    End Sub

    Private Sub Items_ItemAdd(ByVal Item As Object)

    'Declaring Variables [BD]
    Dim sOutputFileName As String

    Dim oMessage As Outlook.MailItem
    Dim oAttachment As Outlook.Attachments

    'Initializing Variables [BD]
    sDateTime = Format(Now(), "yyyymmddhhnnss")
    sOutputFolderPath = "C:\Earls Organic\"

        On Error GoTo ErrorHandler

        If TypeName(Item) = "MailItem" Then

            Set oMessage = Item
            Set oAttachment = oMessage.Attachments

            sOutputFileName = oMessage.Subject & " " & sDateTime
            sOutputFolderPathAndName = sOutputFolderPath & sOutputFileName & ".pdf"
            oAttachment.Item(1).SaveAsFile sOutputFolderPathAndName

            Set oAttachment = Nothing
            Set oItem = Nothing

        End If

    ProgramExit:
        Exit Sub

    ErrorHandler:
            MsgBox Err.Number & " - " & Err.Description
            Resume ProgramExit

    End Sub

【问题讨论】:

  • 我认为如果您要保存附件,则无需定义扩展名吧? docs.microsoft.com/en-us/office/vba/api/…您只需要定义保存附件的位置即可。
  • 可能,我会尝试一下,虽然我不完全确定这样的事情会损坏文件。
  • 如果您更改原始扩展名,那么它一定会损坏它
  • 我试过了,它保存了没有扩展名的文件,它仍然损坏。
  • 您确定附件(1) 是PDF 文件吗?签名和图像可以记录为附件。您应该扫描附件集合并检查扩展名,直到找到 PDF 文件。

标签: vba pdf outlook


【解决方案1】:

根据要求,这是我的评论作为答案:

您确定附件 (1) 是 PDF 文件吗?签名和图像可以记录为附件。您应该扫描附件集合并检查扩展名,直到找到 PDF 文件。

【讨论】:

    【解决方案2】:

    SaveAsFile 不会损坏文件。您永远不会检查该文件是否实际上是 PDF - 您可以拥有其他附件,这些附件在 Outlook 中可能会或可能不会被看到(例如图像)。您假设第一个附件是 PDF。遍历所有附件检查Attachment.FileName 属性以确保您得到您所期望的。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 2013-11-25
      • 2015-03-14
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-29
      • 2012-01-04
      相关资源
      最近更新 更多