嵌入附件时保存附件出错

问题描述 投票:0回答:1

我正在保存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

完整的错误信息是:

enter image description here

我不需要嵌入式图片,所以跳过它们也可以。

outlook-vba email-attachments
1个回答
0
投票

首先,确保文件路径是完全限定的,也就是说,你在这里用一个有效的字符串结束。

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

0
投票

那是一个RTF信息吗?RTF信息嵌入的图像和对象(如Excel电子表格)不是作为文件,而是作为OLE对象,并且 Attachment.SaveAsFile 会导致OLE附件失败。如果你想过滤掉这样的附件,请确保你跳过带有 Attachment.Type = olOLE (6) 或只处理类型为 olByValueolEmbeddeditem.

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

© www.soinside.com 2019 - 2024. All rights reserved.