VBA – Excel에서 Outlook으로 이메일 보내기
Last updated on 5월 3, 2023
이 튜토리얼에서는 VBA를 사용하여 Excel에서 Outlook으로 이메일을 보내는 방법을 보여 줍니다.
활성 통합 문서 보내기
Function SendActiveWorkbook(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean
On Error Resume Next
Dim appOutlook As Object
Dim mItem As Object
'새로운 아웃룩 객체를 생성합니다
Set appOutlook = CreateObject("Outlook.Application")
Set mItem = appOutlook .CreateItem(0)
With mItem
.To = strTo
.CC = ""
.Subject = strSubject
.Body = strBody
.Attachments.Add ActiveWorkbook.FullName
'이메일을 즉시 보내거나 보낼 내용을 화면에 표시합니다
.Display 'or .Send
End With
'객체를 비웁니다
Set mItem = Nothing
Set appOutlook = Nothing
End Function
아래 프로시저에서와 같이 위의 함수를 호출할 수 있습니다.
Sub SendMail()
Dim strTo As String
Dim strSubject As String
Dim strBody As String
'변수들에 대해 정의합니다
strTo = "jon.smith@gmail.com"
strSubject = "재무 파일 첨부 드립니다"
strBody = "내용을 입력해 주세요"
'이메일을 보내도록 함수를 호출합니다
If SendActiveWorkbook(strTo, strSubject, , strBody) = true then
Msgbox "이메일이 성공적으로 생성되었습니다"
Else
Msgbox "이메일 생성을 실패하였습니다"
End if
End Sub
Early 바인딩을 사용하여 Outlook 객체 라이브러리 참조하기
위의 코드는 Late 바인딩을 사용하여 Outlook 객체를 참조합니다. 원하는 경우 Early 바인딩을 사용하여 Excel VBA에 대한 참조를 추가하고 Outlook 애플리케이션 및 Outlook 메일 항목을 선언할 수 있습니다. Early 바인딩을 사용하면 코드가 더 빠르게 실행되지만 사용자가 PC에 동일한 버전의 Microsoft Office가 있어야 하므로 제한이 있습니다.
도구 메뉴의 참조를 클릭하여 참조 대화상자를 표시합니다.
사용 중인 Office 버전에 대한 Microsoft Outlook Object Library를 참조로 추가합니다.
그러면 코드에서 이 참조를 사용할 수 있습니다.
Early 바인딩의 가장 큰 장점은 사용 가능한 객체를 표시하는 드롭다운 목록을 사용할 수 있다는 점입니다.
활성 통합 문서에서 워크 시트 보내기
워크 시트 하나를 보내려면 먼저 기존 통합 문서에서 해당 시트만 포함된 새 통합 문서를 만든 다음 해당 시트를 보내야 합니다.
Function SendActiveWorksheet(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean
On Error GoTo eh
'객체를 정의할 변수를 선언합니다
Dim wbDestination As Workbook
Dim strDestName As String
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim OutApp As Object
Dim OutMail As Object
Dim strTempName As String
Dim strTempPath As String
'새 통합문서를 만들고 변수로 정의합니다
Set wbDestination = Workbooks.Add
strDestName = wbDestination.Name
'소스가 될 통합문서와 워크시트를 변수로 정의합니다
Set wbSource = ActiveWorkbook
Set wsSource = wbSource.ActiveSheet
'활성시트를 새 통합문서로 복사합니다
wsSource.Copy After:=Workbooks(strDestName).Sheets(1)
'통합문서를 임시 이름으로 저장합니다
strTempPath = Environ$("temp") & "\"
strTempName = "List obtained from " & wbSource.Name & ".xlsx"
With wbDestination
.SaveAs strTempPath & strTempName
'통합문서를 이메일에 첨부합니다
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = strTo
.Subject = strSubject
.Body = strBody
.Attachments.Add wbDestination.FullName
'Send를 사용하여 즉시 보내거나 Display를 사용하여 화면에 이메일을 표시합니다
.Display 'or .Send
End With
.Close False
End With
'임시로 저장한 통합문서를 삭제합니다
Kill strTempPath & strTempName
'객체를 초기화하여 메모리를 초기화합니다
Set wbDestination = Nothing
Set wbSource = Nothing
Set wsSource = Nothing
Set OutMail = Nothing
Set OutApp = Nothing
Exit Function
eh:
MsgBox Err.Description
End Function
이 함수를 실행하기 위해 다음 프로시저를 사용할 수 있습니다.
Sub SendSheetMail()
Dim strTo As String
Dim strSubject As String
Dim strBody As String
strTo = "jon.smith@gmail.com"
strSubject = "첨부된 재무 파일을 확인 부탁드립니다"
strBody = "이메일 본문을 작성하세요"
If SendActiveWorksheet(strTo, strSubject, , strBody) = True Then
MsgBox "Email이 성공적으로 생성되었습니다"
Else
MsgBox "Email 생성이 실패하였습니다!"
End If
End Sub