programing

Outlook에서 첨부 파일을 다운로드하여 Excel로 열기

bestprogram 2023. 4. 22. 10:58

Outlook에서 첨부 파일을 다운로드하여 Excel로 열기

Excel의 VBA를 사용하여 Outlook 이메일로 Excel 스프레드시트 첨부 파일을 다운로드하여 열려고 합니다.어떻게 하면 좋을까요?

  1. Outlook 수신 트레이의 첫 번째 이메일(최신 이메일)에서 유일한 첨부 파일을 다운로드합니다.
  2. 지정된 경로의 파일에 첨부 파일을 저장합니다(예: "C:...")
  3. 첨부 파일 이름을 현재 날짜 + 이전 파일 이름으로 변경합니다.
  4. 이메일을 "C:.."와 같은 경로로 다른 폴더에 저장합니다.."
  5. Outlook에서 전자 메일을 "읽음"으로 표시합니다.
  6. Excel에서 Excel 첨부 파일을 엽니다.

또한 다음 항목을 개별 변수에 할당된 개별 문자열로 저장할 수 있습니다.

  • 보낸 사람 이메일 주소
  • 수령일
  • 송신일
  • 주제
  • 이메일의 메시지

다른 질문을 하거나 직접 찾아보는 게 나을 수도 있지만요.

현재 보유하고 있는 코드는 온라인상의 다른 포럼에서 가져온 것으로, 그다지 도움이 되지 않을 수 있습니다.다만, 여기에서는, 몇개의 작업을 실시하고 있습니다.

Sub SaveAttachments()
    Dim olFolder As Outlook.MAPIFolder
    Dim att As Outlook.Attachment
    Dim strFilePath As String
    Dim fsSaveFolder As String

    fsSaveFolder = "C:\test\"

    strFilePath = "C:\temp\"

    Set olFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

    For Each msg In olFolder.Items
        While msg.Attachments.Count > 0
            bflag = False
            If Right$(msg.Attachments(1).Filename, 3) = "msg" Then
                bflag = True
                msg.Attachments(1).SaveAsFile strFilePath & strTmpMsg
                Set msg2 = Application.CreateItemFromTemplate(strFilePath & strTmpMsg)
            End If
            sSavePathFS = fsSaveFolder & msg2.Attachments(1).Filename


    End If
End Sub

완전한 코드를 한 번에 알려드릴 수는 있지만, 그것으로부터 배우는 것은 도움이 되지 않습니다.)그러면 당신의 요구를 정리하고 하나씩 대응해 나가겠습니다.투고가 매우 길기 때문에 조금만 기다려 주세요:)

총 5개의 파트가 있으며 7개의 포인트(예: 7개, 6개가 아님)를 모두 포함하므로 7번째 포인트에 대해 새로운 질문을 작성할 필요가 없습니다.


파트 - 1

  1. Outlook 접속 작성
  2. 읽지 않은 이메일이 있는지 확인하는 중
  3. 다음과 같은 세부 정보 검색Sender email Address,Date received,Date Sent,Subject,The message of the email

이 코드의 예를 참조해 주세요.Excel에서 Outlook에 늦게 바인드하여 읽지 않은 항목이 있는지 확인하고 관련 내용을 검색하고 있습니다.

Const olFolderInbox As Integer = 6

Sub ExtractFirstUnreadEmailDetails()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object

    '~~> Outlook Variables for email
    Dim eSender As String, dtRecvd As String, dtSent As String
    Dim sSubj As String, sMsg As String

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Store the relevant info in the variables
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        eSender = oOlItm.SenderEmailAddress
        dtRecvd = oOlItm.ReceivedTime
        dtSent = oOlItm.CreationTime
        sSubj = oOlItm.Subject
        sMsg = oOlItm.Body
        Exit For
    Next

    Debug.Print eSender
    Debug.Print dtRecvd
    Debug.Print dtSent
    Debug.Print sSubj
    Debug.Print sMsg
End Sub

따라서 변수에 세부 정보를 저장하는 것에 대해 설명하는 요청을 처리할 수 있습니다.


파트 - 2

이제 다음 요청으로 넘어갑니다.

  1. Outlook 수신 트레이의 첫 번째 이메일(최신 이메일)에서 유일한 첨부 파일을 다운로드합니다.
  2. 지정된 경로의 파일에 첨부 파일을 저장합니다(예: "C:...")
  3. 첨부 파일 이름을 현재 날짜 + 이전 파일 이름으로 변경합니다.

이 코드의 예를 참조해 주세요.다시 Excel에서 Outlook에 늦게 바인드하여 읽지 않은 항목이 있는지 확인하고 첨부 파일이 있는지, 그리고 해당 폴더에 다운로드가 되었는지 확인하고 있습니다.

Const olFolderInbox As Integer = 6
'~~> Path for the attachment
Const AttachmentPath As String = "C:\"

Sub DownloadAttachmentFirstUnreadEmail()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> New File Name for the attachment
    Dim NewFileName As String
    NewFileName = AttachmentPath & Format(Date, "DD-MM-YYYY") & "-"

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Extract the attachment from the 1st unread email
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        '~~> Check if the email actually has an attachment
        If oOlItm.Attachments.Count <> 0 Then
            For Each oOlAtch In oOlItm.Attachments
                '~~> Download the attachment
                oOlAtch.SaveAsFile NewFileName & oOlAtch.Filename
                Exit For
            Next
        Else
            MsgBox "The First item doesn't have an attachment"
        End If
        Exit For
    Next
 End Sub

파트 - 3

다음 요청으로 넘어갑니다.

  1. 이메일을 "C:.."와 같은 경로로 다른 폴더에 저장합니다.."

이 코드의 예를 참조해 주세요.그러면 이메일이 C:\로 저장됩니다.

Const olFolderInbox As Integer = 6
'~~> Path + Filename of the email for saving
Const sEmail As String = "C:\ExportedEmail.msg"

Sub SaveFirstUnreadEmail()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Save the 1st unread email
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        oOlItm.SaveAs sEmail, 3
        Exit For
    Next
End Sub

파트 - 4

다음 요청으로 넘어갑니다.

  1. Outlook에서 전자 메일을 "읽음"으로 표시합니다.

이 코드의 예를 참조해 주세요.은 '이메일'로 됩니다.read.

Const olFolderInbox As Integer = 6

Sub MarkAsUnread()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Mark 1st unread email as read
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        oOlItm.UnRead = False
        DoEvents
        oOlItm.Save
        Exit For
    Next
 End Sub

파트 - 5

다음 요청으로 넘어갑니다.

  1. Excel 첨부 파일을 Excel로 엽니다.

위와 같이 파일/파일을 다운로드한 후 아래 코드의 경로를 사용하여 파일을 엽니다.

Sub OpenExcelFile()
    Dim wb As Workbook

    '~~> FilePath is the file that we earlier downloaded
    Set wb = Workbooks.Open(FilePath)
End Sub

이 투고를 여러 개의 블로그 투고(자세한 설명 포함)로 변환하여 vba-excel의 포인트 15, 16 및 17에서 액세스 할 수 있습니다.

(Excel vba)

Sid :)님의 코드(코드 도용)에 감사드립니다.나는 오늘 이 상황이 있었다.여기 제 코드가 있습니다.아래 코드는 첨부파일을 저장하고 메일도 정보를 보냅니다.모든 크레딧은 Sid에게 돌아갑니다.

Tested 

Sub mytry()
Dim olapp As Object
Dim olmapi As Object
Dim olmail As Object
Dim olitem As Object
Dim lrow As Integer
Dim olattach As Object
Dim str As String

Const num As Integer = 6
Const path As String = "C:\HP\"
Const emailpath As String = "C:\Dell\"
Const olFolderInbox As Integer = 6

Set olp = CreateObject("outlook.application")
Set olmapi = olp.getnamespace("MAPI")
Set olmail = olmapi.getdefaultfolder(num)

If olmail.items.restrict("[UNREAD]=True").Count = 0 Then

    MsgBox ("No Unread mails")

    Else

        For Each olitem In olmail.items.restrict("[UNREAD]=True")
            lrow = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row + 1

            Range("A" & lrow).Value = olitem.Subject
            Range("B" & lrow).Value = olitem.senderemailaddress
            Range("C" & lrow).Value = olitem.to
            Range("D" & lrow).Value = olitem.cc
            Range("E" & lrow).Value = olitem.body

            If olitem.attachments.Count <> 0 Then

                For Each olattach In olitem.attachments

                    olattach.SaveAsFile path & Format(Date, "MM-dd-yyyy") & olattach.Filename

                Next olattach

            End If
    str = olitem.Subject
    str = Replace(str, "/", "-")
    str = Replace(str, "|", "_")
    Debug.Print str
            olitem.SaveAs (emailpath & str & ".msg")
            olitem.unread = False
            DoEvents
            olitem.Save
        Next olitem

End If

ActiveSheet.Rows.WrapText = False

End Sub

언급URL : https://stackoverflow.com/questions/11781320/download-attachment-from-outlook-and-open-in-excel