메인 컨텐츠로 가기

Excel에서 버튼을 클릭하면 이메일을 보내는 방법은 무엇입니까?

Excel 워크 시트에서 버튼을 클릭하여 Outlook을 통해 이메일을 보내야한다고 가정하면 어떻게 할 수 있습니까? 이 기사에서는 VBA 방법을 자세히 소개합니다.

VBA 코드로 버튼을 클릭하면 이메일 보내기


VBA 코드로 버튼을 클릭하면 이메일 보내기

Excel 통합 문서에서 명령 단추를 클릭 한 경우 Outlook을 통해 이메일을 보내려면 다음과 같이하십시오.

1. 클릭하여 워크 시트에 명령 단추를 삽입합니다. 개발자 > 끼워 넣다 > 명령 단추 (ActiveX 컨트롤). 스크린 샷보기 :

2. 삽입 된 명령 단추를 마우스 오른쪽 단추로 클릭 한 다음 코드보기 아래 스크린 샷 쇼와 같이 오른쪽 클릭 메뉴에서.

3. 오프닝에서 응용 프로그램 용 Microsoft Visual Basic 창에서 코드 창의 원래 코드를 다음 VBA 스크립트로 바꾸십시오.

VBA 코드 : Excel에서 버튼을 클릭하면 이메일 보내기

Private Sub CommandButton1_Click()
'Updated by Extendoffice 2017/9/14
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Body content" & vbNewLine & vbNewLine & _
              "This is line 1" & vbNewLine & _
              "This is line 2"
                  On Error Resume Next
    With xOutMail
        .To = "Email Address"
        .CC = ""
        .BCC = ""
        .Subject = "Test email send by button clicking"
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub

노트:

1). 필요에 따라 이메일 본문을 변경하십시오. xMailBody 코드의 줄.

삼). 교체 이메일 주소 받는 사람 이메일 주소와 함께 .To = "이메일 주소".

삼). 필요에 따라 참조 및 숨은 참조 수신자 지정 .CC =“” .Bcc =“” 섹션을 참조하십시오.

4). 줄에서 이메일 제목 변경 .Subject = "버튼 클릭으로 테스트 이메일 보내기".

4. 누르세요 다른 + Q 키를 동시에 닫아 응용 프로그램 용 Microsoft Visual Basic 창.

5. 클릭하여 디자인 모드를 끕니다. 개발자 > 디자인 모드. 스크린 샷보기 :

이제부터는 Command Button을 클릭 할 때마다 지정된 수신자, 제목 및 본문이 포함 된 이메일이 자동으로 생성됩니다. 클릭하여 이메일을 보내주십시오 전송 버튼을 클릭합니다.

주의 사항: VBA 코드는 Outlook을 전자 메일 프로그램으로 사용할 때만 작동합니다.

Excel에서 생성 된 메일 링리스트의 필드를 기반으로 Outlook을 통해 쉽게 이메일을 보낼 수 있습니다.

  이메일 보내기 ~의 유용성 Excel 용 Kutools Excel에서 생성 된 메일 링리스트의 필드를 기반으로 Outlook을 통해 이메일을 보낼 수 있도록 도와줍니다.
지금 다운로드하여 사용해 보세요! (30일 무료 트레일)


관련 기사 :

최고의 사무 생산성 도구

🤖 Kutools AI 보좌관: 다음을 기반으로 데이터 분석을 혁신합니다. 지능형 실행   |  코드 생성  |  사용자 정의 수식 만들기  |  데이터 분석 및 차트 생성  |  Kutools 기능 호출...
인기 기능: 중복 항목 찾기, 강조 표시 또는 식별   |  빈 행 삭제   |  데이터 손실 없이 열이나 셀 결합   |   수식없이 반올림 ...
슈퍼 조회: 다중 기준 VLookup    다중 값 VLookup  |   여러 시트에 걸친 VLookup   |   퍼지 조회 ....
고급 드롭다운 목록: 드롭다운 목록을 빠르게 생성   |  종속 드롭다운 목록   |  다중 선택 드롭 다운 목록 ....
열 관리자: 특정 개수의 열 추가  |  열 이동  |  Toggle 숨겨진 열의 가시성 상태  |  범위 및 열 비교 ...
특색 지어진 특징: 그리드 포커스   |  디자인보기   |   큰 수식 바    통합 문서 및 시트 관리자   |  리소스 라이브러리 (자동 텍스트)   |  날짜 선택기   |  워크 시트 결합   |  셀 암호화/해독    목록으로 이메일 보내기   |  슈퍼 필터   |   특수 필터 (굵게/기울임꼴/취소선 필터링...) ...
상위 15개 도구 세트12 본문 도구 (텍스트 추가, 문자 제거,...)   |   50+ 거래차트 유형 (Gantt 차트,...)   |   40+ 실용 방식 (생일을 기준으로 나이 계산,...)   |   19 삽입 도구 (QR 코드 삽입, 경로에서 그림 삽입,...)   |   12 매출 상승 도구 (숫자를 단어로, 환율,...)   |   7 병합 및 분할 도구 (고급 결합 행, 셀 분할,...)   |   ... 그리고 더

Excel용 Kutools로 Excel 기술을 강화하고 이전과는 전혀 다른 효율성을 경험해 보세요. Excel용 Kutools는 생산성을 높이고 시간을 절약하기 위해 300개 이상의 고급 기능을 제공합니다.  가장 필요한 기능을 얻으려면 여기를 클릭하십시오...

상품 설명


Office Tab은 Office에 탭 인터페이스를 제공하여 작업을 훨씬 쉽게 만듭니다.

  • Word, Excel, PowerPoint에서 탭 편집 및 읽기 사용, Publisher, Access, Visio 및 Project.
  • 새 창이 아닌 동일한 창의 새 탭에서 여러 문서를 열고 만듭니다.
  • 생산성을 50% 높이고 매일 수백 번의 마우스 클릭을 줄입니다!
Comments (76)
Rated 3.5 out of 5 · 1 ratings
This comment was minimized by the moderator on the site
Hi,

How do I send only one sheet from my workbook and not the whole workbook with the submitting button?
This comment was minimized by the moderator on the site
Hi Diana,
Please try if the following VBA code can help.
Before using this code, make sure to replace ThisWorkbook.Sheets("Sheet1") with the actual name of the worksheet you want to attach. Also, be sure to set the email’s .To property to the actual recipient’s address.

This code creates a temporary workbook file in your temp folder, attaches it to an email, and then shows this email. After showing the email, it will delete the temporary file. If you prefer to send the email directly without displaying it, you can replace the .Display method with .Send.

Private Sub CommandButton1_Click()
'Updated by Extendoffice 20240411
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Dim xSheet As Worksheet
    Dim xTempWorkbook As Workbook
    Dim xTempFilePath As String
    Dim xTempFileName As String

    On Error GoTo ErrHandler
    ' Set the name of the worksheet you want to attach (e.g., "Sheet1")
    Set xSheet = ThisWorkbook.Sheets("Sheet1")

    ' Create the path and filename for the temporary file
    xTempFilePath = Environ$("TEMP") & "\"
    xTempFileName = "TempWorkbook" & Format(Now, "yyyymmddhhmmss") & ".xlsx"

    ' Copy the worksheet to a new workbook
    xSheet.Copy
    Set xTempWorkbook = ActiveWorkbook

    ' Save the new workbook as a temporary file
    xTempWorkbook.SaveAs xTempFilePath & xTempFileName

    ' Close the new workbook
    xTempWorkbook.Close SaveChanges:=False

    ' Create the Outlook application and Mail item
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)

    ' Set the email body content
    xMailBody = "Body content" & vbNewLine & vbNewLine & _
                "This is line 1" & vbNewLine & _
                "This is line 2"

    ' Set up the email details and display the email
    With xOutMail
        .To = "" ' Set the recipient's email address
        .CC = ""
        .BCC = ""
        .Subject = "Test email sent by button clicking"
        .Body = xMailBody
        .Attachments.Add xTempFilePath & xTempFileName ' Attach the file
        .Display ' or use .Send to send the email directly
    End With

    Kill xTempFilePath & xTempFileName

    Set xOutMail = Nothing
    Set xOutApp = Nothing
    Set xSheet = Nothing
    Exit Sub

ErrHandler:
    MsgBox "An error has occurred: " & Err.Description
End Sub
This comment was minimized by the moderator on the site
Why is it that the filename of the attachment has the %20 filled in for the spaces? How to remove them and have the original file name, Price Discrepancy form.xlsm instead of Price%20Discrepancy%20form.xlsm?
Thank you.
This comment was minimized by the moderator on the site
Hi There,

I want to be able to attach a spreadsheet to an email and send it off, however, the difference is in the spreadsheet there is a date in cell A1 and description of works in cell A3, I want to be able to combine those and rename the spreadsheet to the attachments as per the date and description of works.

Thanks
This comment was minimized by the moderator on the site
Hi Fadi,
The following VBA code can do you a favor. Please give it a try. Thank you.
Private Sub CommandButton1_Click()

    'Update 20221123
    Dim xFile As String
    Dim xFormat As Long
    Dim Wb As Workbook
    Dim Wb2 As Workbook
    Dim FilePath As String
    Dim FileName As String
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    On Error Resume Next
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = True
    
    FileName = Format(ActiveSheet.Range("A1").Value, "dd-mmm-yy") & " " & ActiveSheet.Range("A3").Value
    Set Wb = Application.ActiveWorkbook
    ActiveSheet.Copy
    Set Wb2 = Application.ActiveWorkbook
    Select Case Wb.FileFormat
    Case xlOpenXMLWorkbook:
        xFile = ".xlsx"
        xFormat = xlOpenXMLWorkbook
    Case xlOpenXMLWorkbookMacroEnabled:
        If Wb2.HasVBProject Then
            xFile = ".xlsm"
            xFormat = xlOpenXMLWorkbookMacroEnabled
        Else
            xFile = ".xlsx"
            xFormat = xlOpenXMLWorkbook
        End If
    Case Excel8:
        xFile = ".xls"
        xFormat = Excel8
    Case xlExcel12:
        xFile = ".xlsb"
        xFormat = xlExcel12
    End Select
    FilePath = Environ$("temp") & "\"

    Set OutlookApp = CreateObject("Outlook.Application")
    Set OutlookMail = OutlookApp.CreateItem(0)
    Debug.Print FilePath & FileName & xFile
    Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
    With OutlookMail
        .To = ""
        .CC = ""
        .BCC = ""
        .Subject = "Type your subject here"
        .Body = "Type your email body here."
        .Attachments.Add Wb2.FullName
        .Display
'        .Send
    End With
    Wb2.Close
    Kill FilePath & FileName & xFile
    Set OutlookMail = Nothing
    Set OutlookApp = Nothing
    Application.ScreenUpdating = True
    Application.DisplayAlerts = False

End Sub
This comment was minimized by the moderator on the site
Hello Guys,

Could you please help me with a VB code which should expand, Ungroup or Unhide base on if cell is selected with X and Y value
This comment was minimized by the moderator on the site
Hi Santosh,
I don't quite understand what you mean. You may need to attach a screenshot or a sample file to describe the problem you encountered more clearly.
This comment was minimized by the moderator on the site
Hi,
In my excel there is an chart, is there a way that when the button is pressed, the email is generated with the chart included into the body of the email?
Rated 3.5 out of 5
This comment was minimized by the moderator on the site
Hi Jack,
The following VBA code can do you a favor. After clicking the button, a dialog box will pop up, please enter the name of the chart you will include in your email body.
In the code, please change "Sheet1" to the name of the sheet that contains the chart you will send.
Private Sub CommandButton1_Click()
'Updated by Extendoffice 20220826
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xStartMsg As String
    Dim xEndMsg As String
    Dim xChartName As String
    Dim xChartPath As String
    Dim xPath As String
    Dim xChart As ChartObject
    On Error Resume Next
    xChartName = Application.InputBox("Please enter the chart name:", "KuTools for Excel", , , , , , 2)
    If xChartName = "" Then Exit Sub
    Set xChart = Sheets("Sheet1").ChartObjects(xChartName) 'Change "Sheet1" to your worksheet name
    If xChart Is Nothing Then Exit Sub
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xStartMsg = "<font size='5' color='black'> Good Day," & "<br> <br>" & "Please find the chart below: " & "<br> <br> </font>"
    xEndMsg = "<font size='4' color='black'> Many Thanks," & "<br> <br> </font>"
    xChartPath = Application.ActiveWorkbook.Path & "\" & Environ("USERNAME") & VBA.Format(VBA.Now(), "DD_MM_YY_HH_MM_SS") & ".bmp"
    xPath = "<p align='Left'><img src="/%20&%20"cid:" & Mid(xChartPath, InStrRev(xChartPath, "\") + 1) & """  width=700 height=500 > <br> <br>"
    xChart.Chart.Export xChartPath
    With xOutMail
        .To = ""
        .Subject = "Add Chart in outlook mail body"
        .Attachments.Add xChartPath
        .HTMLBody = xStartMsg & xPath & xEndMsg
        .Display
    End With
    Kill xChartPath
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub
This comment was minimized by the moderator on the site
Hi

I'm trying the initial request to simply have a button to open a new email but it doesn't seem to work.

Wondering if it has something to do with the " 'Updated by Extendoffice 2017/9/14" date.

Please let me know how to update this so I can get the button working :)
This comment was minimized by the moderator on the site
Hi Jonathan Matthias,
This line 'Updated by Extendoffice 2017/9/14" is a remark we give to the VBA code, which has nothing to do with the running of the VBA code.
Please make sure that CommandButton1 in the first line of the code is the same name as your button.
The name of the button will be displaysed in the Name Box after selecting it. See the screenshot below.
https://www.extendoffice.com/images/stories/comments/comment-picture-zxm/email_button.png
This comment was minimized by the moderator on the site
Hi everyone,

On the lines of the email I'm trying right 4 lines of text and even adding "vbNewLine" is returning some errors. Also I'm trying to reference a column on the email subject and isn't showing anything. I really would appreciate any help.

Private Sub CommandButton1_Click()
'Updated by Extendoffice 2017/9/14
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
ActiveWorkbook.Save

xMailBody = "Hi Kaitlyn," & vbNewLine & vbNewLine & _
"Please see the attached NPI form for for you review and approval." & vbNewLine & vbNewLine _
"Many thanks in advance, Liz"

On Error Resume Next
With xOutMail
.To = ""
.CC = ""
.BCC = ""
.Subject = "Updated NPI Form" & (B5)
.Body = xMailBody
.Attachments.Add ActiveWorkbook.FullName
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Sub GroupBox542_Click()
End Sub
This comment was minimized by the moderator on the site
Hi Camila,
The following VBA code can do you a favor. Please give it a try. Thank you.
Private Sub CommandButton1_Click()
'Updated by Extendoffice 2017/9/14
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    On Error Resume Next
    Set xOutApp = CreateObject("Outlook.Application")
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = "Hi Kaitlyn," & vbNewLine & _
               "The second line" & vbNewLine & _
              "Please see the attached NPI form for for you review and approval." & vbNewLine & _
              "Many thanks in advance, Liz"
                  On Error Resume Next
    With xOutMail
        .To = ""
        .CC = ""
        .BCC = ""
        .Subject = "Updated NPI Form" & Range("B5")
        .Body = xMailBody
        .Display   'or use .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
End Sub
This comment was minimized by the moderator on the site
How do I add code so that when the user submits the form via email to prompt them to include their name
This comment was minimized by the moderator on the site
Hi Susy Fong,
I don't quite understand what you mean. Can you explain it more specifically?
This comment was minimized by the moderator on the site
Hi, your tutorial has been very useful but if I wanted to include a range in the mail body instead of a string how would I go about that. Currently replacing the strings by referencing the cells is not working eg. xMailBody = ThisWorkbook.Activeworksheet("sheet1").Range("A2:F40") does not work
This comment was minimized by the moderator on the site
Activeworksheet("sheet1").Range("A2:F40").Value will work
This comment was minimized by the moderator on the site
Hi, perfect. Thank you. Is there any possibility to set also from which mail adress should be the mail sent? (in Outlook, I have two adresses, it automatically set one adress, but I need the second just for this makro) Thanks
There are no comments posted here yet
Load More
Please leave your comments in English
Posting as Guest
×
Rate this post:
0   Characters
Suggested Locations