Ошибка сохранения вложенных файлов, когда они встроены - PullRequest
0 голосов
/ 24 апреля 2020

Я сохраняю вложения 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

Мне не нужны встроенные изображения так что пропуск их тоже бы сработал.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2020

Это сообщение RTF? RTF-сообщения встраивают изображения и объекты (например, электронные таблицы Excel) не в файлы, а в объекты OLE, и Attachment.SaveAsFile завершится ошибкой для вложений OLE. Если вы хотите отфильтровать вложения подобным образом, убедитесь, что вы пропускаете вложения с Attachment.Type = olOLE (6) или имеете дело только с вложениями типа olByValue или olEmbeddeditem.

Если вам все еще нужно сохранить OLE вложений, вы можете использовать Redemption - его RDOAttachment . SaveAsFile извлекает данные файла из наиболее распространенных вложений OLE (таких как документы Word, PDF-файлы, таблицы Excel, изображения и т. д.). c.)

0 голосов
/ 24 апреля 2020

Прежде всего, убедитесь, что путь к файлу полностью указан, т. Е. Вы получите здесь правильную строку:

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
...