Outlook에서 첨부 파일을 다운로드하여 Excel로 열기
Excel의 VBA를 사용하여 Outlook 이메일로 Excel 스프레드시트 첨부 파일을 다운로드하여 열려고 합니다.어떻게 하면 좋을까요?
- Outlook 수신 트레이의 첫 번째 이메일(최신 이메일)에서 유일한 첨부 파일을 다운로드합니다.
- 지정된 경로의 파일에 첨부 파일을 저장합니다(예: "C:...")
- 첨부 파일 이름을 현재 날짜 + 이전 파일 이름으로 변경합니다.
- 이메일을 "C:.."와 같은 경로로 다른 폴더에 저장합니다.."
- Outlook에서 전자 메일을 "읽음"으로 표시합니다.
- 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
- Outlook 접속 작성
- 읽지 않은 이메일이 있는지 확인하는 중
- 다음과 같은 세부 정보 검색
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
이제 다음 요청으로 넘어갑니다.
- Outlook 수신 트레이의 첫 번째 이메일(최신 이메일)에서 유일한 첨부 파일을 다운로드합니다.
- 지정된 경로의 파일에 첨부 파일을 저장합니다(예: "C:...")
- 첨부 파일 이름을 현재 날짜 + 이전 파일 이름으로 변경합니다.
이 코드의 예를 참조해 주세요.다시 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
다음 요청으로 넘어갑니다.
- 이메일을 "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
다음 요청으로 넘어갑니다.
- 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
다음 요청으로 넘어갑니다.
- 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
'programing' 카테고리의 다른 글
SQL과 빈 문자열의 병합 (0) | 2023.04.22 |
---|---|
스위치 문의 여러 값에 대한 PowerShell 구문은 무엇입니까? (0) | 2023.04.22 |
출력을 변수로 업데이트 (0) | 2023.04.22 |
ASP를 사용하는 가장 큰 장점.넷 MVC 대 웹 폼 (0) | 2023.04.22 |
Unix 쉘 스크립트에서 환경 변수가 설정되어 있는지 확인하는 간결한 방법은 무엇입니까? (0) | 2023.04.22 |