多语言展示
当前在线:1231今日阅读:86今日分享:14

Excel中批量发送邮件

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

Excel2010版

方法/步骤
1

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

2

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

3

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

4

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

5

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.CloseEnd Function

6

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

7

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

8

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

9

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代码。

推荐信息