跳到主要内容

如果在Excel中单击按钮,如何发送电子邮件?

添加一名作者 最后修改时间:2020-07-22

假设您需要通过单击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)。 请根据需要更改电子邮件正文 邮件正文 代码中的一行。

2)。 更换 电子邮件 收件人电子邮件地址在一行 .To =“电子邮件地址”.

3)。 根据需要指定抄送和密件抄送收件人 .CC =“” .Bcc =“” 部分。

4)。 更改电子邮件主题 .Subject =“测试通过单击按钮发送的电子邮件”.

4。 按 其他 + Q 同时关闭按键 Microsoft Visual Basic应用程序 窗口。

5.通过单击关闭设计模式 开发商 > 设计模式。 看截图:

从现在开始,每次单击“命令”按钮时,都会自动创建一封带有指定收件人,主题和正文的电子邮件。 请通过单击发送电子邮件 提交 按钮。

备注:仅当您将Outlook用作电子邮件程序时,VBA代码才起作用。

根据Excel中已创建的邮件列表的字段,通过Outlook轻松发送电子邮件:

我们推荐使用 发电子邮件 实用程序 Kutools for Excel 根据在Excel中创建的邮件列表的字段,帮助通过Outlook发送电子邮件。
立即下载并试用! (30 天免费试用)


相关文章:

最佳办公生产力工具

🤖 Kutools 人工智能助手:基于以下内容彻底改变数据分析: 智能执行   |  生成代码  |  创建自定义公式  |  分析数据并生成图表  |  调用 Kutools 函数...
热门特色: 查找、突出显示或识别重复项   |  删除空白行   |  合并列或单元格而不丢失数据   |   不使用公式进行四舍五入 ...
超级查询: 多条件VLookup    多值VLookup  |   跨多个工作表的 VLookup   |   模糊查询 ....
高级下拉列表: 快速创建下拉列表   |  依赖下拉列表   |  多选下拉列表 ....
列管理器: 添加特定数量的列  |  移动列  |  切换隐藏列的可见性状态  |  比较范围和列 ...
特色功能: 网格焦点   |  设计图   |   大方程式酒吧    工作簿和工作表管理器   |  资源库 (自动文本)   |  日期选择器   |  合并工作表   |  加密/解密单元格    按列表发送电子邮件   |  超级筛选   |   特殊过滤器 (过滤粗体/斜体/删除线...)...
前 15 个工具集12 文本 工具 (添加文本, 删除字符,...)   |   50+ 图表 类型 (甘特图,...)   |   40+ 实用 公式 (根据生日计算年龄,...)   |   19 插入 工具 (插入二维码, 从路径插入图片,...)   |   12 转化 工具 (小写金额转大写, 货币兑换,...)   |   7 合并与拆分 工具 (高级组合行, 分裂细胞,...)   |   ... 和更多

使用 Kutools for Excel 增强您的 Excel 技能,体验前所未有的效率。 Kutools for Excel 提供了 300 多种高级功能来提高生产力并节省时间。  单击此处获取您最需要的功能...

描述


Office Tab 为 Office 带来选项卡式界面,让您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,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