【问题标题】:Error saving attachments when they are embedded嵌入时保存附件时出错
【发布时间】:2020-08-08 07:52:36
【问题描述】:

我正在保存 Outlook 附件(作为副本的一部分)。

当附件是嵌入图像时,我从objAtt.SaveAsFile strFile 行收到一条错误消息。

代码(感谢复制!)是:

Sub CopyAttachments(objSourceItem, objTargetItem)
    Dim objAtt As Outlook.Attachment
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fldTemp = fso.GetSpecialFolder(2) ' TemporaryFolder
    strPath = fldTemp.Path & "\"
    For Each objAtt In objSourceItem.Attachments
        strFile = strPath & objAtt.FileName
        objAtt.SaveAsFile strFile
        objTargetItem.Attachments.Add strFile, , 1, objAtt.DisplayName
        fso.DeleteFile strFile
    Next

    Set fldTemp = Nothing
    Set fso = Nothing
End Sub

完整的错误信息是:

我不需要嵌入图像,因此跳过它们也可以。

【问题讨论】:

  • 您好,感谢您的回复。我认为路径正确且完整,但我会在调试器中再次检查。添加附件没问题,保存就是问题。

标签: vba outlook email-attachments


【解决方案1】:

这是一条 RTF 消息吗? RTF 消息不是将图像和对象(例如 Excel 电子表格)嵌入为文件,而是作为 OLE 对象,并且 Attachment.SaveAsFile 将无法用于 OLE 附件。如果您想过滤掉这样的附件,请确保您要么跳过带有Attachment.Type = olOLE (6) 的附件,要么只处理olByValueolEmbeddeditem 类型的附件。

如果您仍需要保存 OLE 附件,您可以使用Redemption - 它的RDOAttachment.SaveAsFile 方法将从最常见的 OLE 附件(如 Word 文档、PDF 文件、Excel 电子表格、图像)中提取文件数据等)

【讨论】:

  • 您好,感谢您的回复。不是rtf,类型是1。所以我还是很疑惑。
  • 您是否获得了有效的 Attachment.FileName 值?
  • 是的,这个名字在我看来是有效的。今天晚些时候我会重新检查。作为一种解决方法,我已经捕获了错误。
  • Dimitry,是的,文件名有效。捕获错误效果很好,所以很遗憾我会保留它。
  • 那么它总是发生在同一个附件上吗?确切的文件名是什么?
【解决方案2】:

首先,确保文件路径是完全限定的,即你在这里得到一个有效的字符串:

strFile = strPath & objAtt.FileName

其次,当您调用Attachments.Add 时,请确保该文件存在于磁盘上。附件的来源可以是文件(由带有文件名的完整文件系统路径表示)或构成附件的 Outlook 项目。

您可以尝试运行以下代码,将附件保存在磁盘上:

Sub SaveAttachment()  
 Dim myInspector As Outlook.Inspector  
 Dim myItem As Outlook.MailItem  
 Dim myAttachments As Outlook.Attachments 

 Set myInspector = Application.ActiveInspector  
 If Not TypeName(myInspector) = "Nothing" Then  
   If TypeName(myInspector.CurrentItem) = "MailItem" Then  
     Set myItem = myInspector.CurrentItem  
     Set myAttachments = myItem.Attachments  

     'Prompt the user for confirmation  
     Dim strPrompt As String  
     strPrompt = "Are you sure you want to save the first attachment " & _  
     "in the current item to the Documents folder? If a file with the " & _  
     "same name already exists in the destination folder, " & _  
     "it will be overwritten with this copy of the file."  

     If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbYes Then  
       myAttachments.Item(1).SaveAsFile Environ("HOMEPATH") & "\My Documents\" & _  
       myAttachments.Item(1).DisplayName  
     End If  
   Else  
     MsgBox "The item is of the wrong type."  
   End If  
 End If  
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    相关资源
    最近更新 更多