Outlook은이 유형의 첨부 파일에 대해이 작업을 수행 할 수 없습니다.

Nov 19 2020

이메일에서 첨부 파일을 저장하려고합니다. 오류 메시지가 나타납니다.

Outlook은이 유형의 첨부 파일에 대해이 작업을 수행 할 수 없습니다.

를 사용 Debug.Print outAttachment하여 그림 (장치 독립적 비트 맵)을 추출하려고합니다.
Excel과 pdf 만 추출하면되지만 코드가 작동한다는 의미라면 그림을 추출해도 괜찮습니다.

Public Sub Extract_Attachments_From_Outlook_Msg_Files()
    
    Dim outApp As Object
    Dim outEmail As Object
    Dim outAttachment As Object
    Dim msgFiles As String, sourceFolder As String, saveInFolder As String
    Dim fileName As String
    Dim FilePath As String
    
    Application.DisplayAlerts = False
           
    msgFiles = Sheets("Instructions").Range("H1") & Sheets("Instructions").Range("H2") & ".msg" 'folder location and filespec of .msg files"
    Debug.Print msgFiles
    saveInFolder = Sheets("Instructions").Range("H1")         'folder where extracted attachments are saved
    Debug.Print saveInFolder
        
    If Right(saveInFolder, 1) <> "\" Then saveInFolder = saveInFolder & "\"
        sourceFolder = Left(msgFiles, InStrRev(msgFiles, "\"))
        Debug.Print sourceFolder
        On Error Resume Next
        Set outApp = GetObject(, "Outlook.Application")
        If outApp Is Nothing Then
            MsgBox "Outlook is not open"
            Exit Sub
        End If
        On Error GoTo 0
        
        fileName = Dir(msgFiles)
        While fileName <> vbNullString
        
        Set outEmail = outApp.Session.OpenSharedItem(sourceFolder & fileName)
            
        For Each outAttachment In outEmail.Attachments
            outAttachment.SaveAsFile saveInFolder & outAttachment.fileName
        Next
        
        fileName = Dir
            
    Wend
        
End Sub

답변

1 DmitryStreblechenko Nov 19 2020 at 04:28

이것은 임베디드 OLE 개체가있는 RT 형식의 메시지입니다. Outlook 개체 모델은 해당 유형의 첨부 파일 (Attachment.Type == olOLE)로 많은 작업을 수행 할 수 없습니다.

Redemption 사용 이 옵션 인 경우 해당 RDOAttachment . SaveAsFile방법은 저장소에서 BMP, EMF, PDF, Excel 등 파일 데이터를 추출 할 수있을만큼 똑똑합니다. 다음과 같은 것이 (내 머리 꼭대기에서) 작업을 수행해야합니다.

  set Session = CreateObject("Redemption.RDOSession")
  set outEmail= Session.GetMessageFromMsgFile(sourceFolder & fileName)
  For Each outAttachment In outEmail.Attachments
      outAttachment.SaveAsFile saveInFolder & outAttachment.fileName
  Next