Excel中批量发送邮件

在日常工作中,经常会遇到需要群发邮件的情况,正常情况下只有一个个手工写邮件,然后发送。这样的工作效率可想而知。下面就介绍一个通过群发邮件的VBA程序。

操作方法

  • 01

    一、数据准备 准备如下图的数据表,包括以下内容: 1) 第一列为“邮件地址”,必须是完整的带后缀的邮件地址。 2) 第二列为“邮件主题”,不同的收件人可以根据需要写不同的主题。 3) 第三列为“邮件内容”,不同的收件人可以根据需要写不同的内容。这里的内容在发送时是以纯文本格式发送的,在单元格里设置的格式均无效。 4) 第四列为“邮件附件”,附件必须带有完整的路径,且必须包括文件扩展名。 5) 第五列为“邮件签名”,签名必须带有完整的路径,且必须包括文件扩展名。这里的邮件签名是自动提取使用者邮箱里设置的签名,如果没有设置签名,那么将为空。

  • 02

    二、插入按钮 1、点击“开发者工具”页面,选择“插入”中的“控件工具”。然后选择“命令按钮”,如下图所示:

  • 03

    2、画出按钮 在表格下面空白处画出“命令按钮”。这时候该按钮默认为编辑状态,按钮四周也有编辑框。如下图所示:

  • 04

    三、输入代码 1、双击可编辑状态的“命令按钮”,便进入VBA代码编辑器。

  • 05

    2、复制以下代码到VBA编辑器中。替换掉编辑器里原有的两行内容。 Private Sub CommandButton1_Click() '要能正确发送并需要对Microseft Outlook进行有效配置 On Error Resume Next Dim rowCount, endRowNo Dim objOutlook As New Outlook.Application Dim objMail As MailItem Dim SigString As String Dim Signature As String '取得当前工作表与Cells(1,1)相连的数据区行数 endRowNo = Application.WorksheetFunction.CountIfs(Range("A:A"), "<>") '创建objOutlook为Outlook应用程序对象 Set objOutlook = New Outlook.Application '开始循环发送电子邮件,比如从第二行开始,第一行是标题 For rowCount = 2 To endRowNo Set objMail = objOutlook.CreateItem(olMailItem)  '创建objMail为一个邮件对象 '提取邮件签名 SigString = Worksheets("Sheet1").Cells(2, 5) If Dir(SigString) <> "" Then Signature = GetBoiler(SigString) Else Signature = "" End If With objMail .To = Cells(rowCount, 1).Value  '设置收件人地址(从Excel表的第一列"邮件地址"字段中获得) .Subject = Cells(rowCount, 2).Value   '设置邮件主题(从Excel表的第二列"邮件主题"字段中获得) .HTMLBody = Cells(rowCount, 3).Value & Signature  '设置邮件内容(从Excel表的第三列"邮件内容"字段中获得) .Attachments.Add Cells(rowCount, 4).Value  '设置附件(从Excel表的第四列"附件"字段中获得) .Send End With Set objMail = Nothing     '销毁objMail对象 Next MsgBox ("邮件全部发送完成!") Set objOutlook = Nothing    '销毁objOutlook对象 End Sub '提取邮件签名子函数 Function GetBoiler(ByVal sFile As String) As String Dim fso As Object Dim ts As Object Set fso = CreateObject("Scripting.FileSystemObject") Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2) GetBoiler = ts.readall ts.Close End Function

  • 06

    3、配置环境。 为了正确执行上面的代码,你还需要VBA编辑器中配置一下。 1) 在菜单中选择: 工具——〉引用

  • 07

    2)在弹出的对话框中找到Microseft Outlook X.0 Object Library并勾选上 (X.0是版本号,不同机器可能不一样)。如下图:

  • 08

    3)点击“OK”退出刚才的对话框。回到以下窗口:

  • 09

    4、关闭VBA编辑器,回到Excel表格中。

  • 10

    四、运行测试代码 1、取消控件编辑状态 点击下图红色圈中的“设计模式”按钮,取消刚才插入的控件的编辑状态。

  • 11

    2、运行代码 取消按钮的编辑状态之后可以看到按钮四周的编辑框没有了,这时候直接点击按钮就可以运行刚才输入的代码了。

  • 12

    3、测试代码 如果上面的代码没有正常运行的话需要重新进入代码编辑器查找原因,解决问题。 以上的代码已经经过多次测试没有问题,完全可以正常运行。

  • 13

    五、保存模板 如果运行完上面的代码之后,还想保存此模板以备下次使用。那么按下保存按钮之后,Excel会跳出以下的对话框。 这时候就需要注意了,如果选择“Yes(是),Excel将以正常的Excel文件保存,默认的扩展名为.xlsx。这是我们是常用的Excel文件。刚才输入的代码将会自动清除。 因此如果要保留VBA代码,就一定要选择“No(否)”。

  • 14

    点击“No(否)”之后,在下面的“另存为”对话框中选择正确的文件类型,见下图中的蓝色条。这时候文件默认的扩展名为.xlsm。 XLSM是XLSX的启用了宏的版本,也就是在XLSX文件中添加了VBA代码。

(0)

相关推荐

  • 只需1分钟 教你在Excel中批量创建工作表

    因为工作需要,有时我们需要在同一个Excel工作簿中创建几十甚至上百个工作表,你是不是想死的心都有了?不用烦心,小编今天教大家一个方法,通过数据透视表,可以瞬间完成任务,又快又好. 首先启动Excel ...

  • excel怎样快速填充序号?excel中批量快速填充上序号的四种方法介绍

    在excel中如何批量快速填充上序号?通常我们在excel 表中填充序号,一般是采用自动填充或者下拉填充,但如果我们需要大批量输入序号又该怎样快速完成呢?接下来,本文将给大家介绍excel中批量快速填 ...

  • excel中批量将经纬度度分秒转换成十进制小数点的方法介绍

    如何利用excel将经纬度度分秒转换成小数点?利用excel的函数编辑功能可以很方便的批量将经纬度转换成十进制的小数点格式,接下来小编就给大家说说如何将经纬度度分秒转换成十进制,以及如何将十进制的经纬 ...

  • 如何将长数字串复制到Excel中?excel中批量粘贴超长数字串的多种方法介绍

    excel中如何批量粘贴超长数字串?在常规格式下,EXCEL会默认把输入超过11位的数字以科学记数法的表达方式来显示,但是这样的显示结果让我们不能直观的看数字,也不能直接区分大小,特别是多个超长数字差 ...

  • excel中批量添加表头的方法

    我们在使用Excel制作表格的时候,经常需要在不同的工作表中添加一样的表头,为了提高工作效率,下面给大家讲讲Excel中批量添加表头的方法.具体如下:1. 比如说,我们图中的Excel中有三个工作表, ...

  • 如何在Excel中批量隔行插入空行?

    相信很多小伙伴在日常办公中都会用到Excel,在其中如何才能批量隔行插入空行呢?方法很简单,下面小编就来为大家介绍.具体如下:1. 首先,在Excel中打开我们要进行操作的表格,并将要插入空行的区域选 ...

  • 怎么在excel中批量取消强制换行?

    如今许多的小伙伴在工作和学习的过程中都会使用到excel,如果我们想要在软件中批量取消强制换行应该如何操作呢?今天,小编就教大家在excel中批量取消强制换行.具体如下:1. 首先,我们在电脑中打开一 ...

  • 怎么在Excel中批量填充非空数据值到空白单元格中

    有的小伙伴在使用Excel软件编辑数据时,发现表格中有很多空白单元格,因此想要批量填充非空数据值到空白单元格中,但是却不知道如何填充,那么小编就来为大家介绍一下吧.具体如下:1. 第一步,双击或者右击 ...

  • 怎么在电脑版Excel中批量添加相同的数据

    电脑版Excel软件被很多人使用,用来编辑数据等,有的用户在使用该软件时,想要批量添加相同的数据,但是却不知道如何添加,那么小编就来为大家介绍一下吧.具体如下:1. 第一步,小编使用了WPS软件,双击 ...