Excel中批量发送邮件

2025-09-29 03:21:12

1、一、数据准备

准备如下图的数据表,包括以下内容:

1) 第一列为“邮件地址”,必须是完整的带后缀的邮件地址。

2) 第二列为“邮件主题”,不同的收件人可以根据需要写不同的主题。

3) 第三列为“邮件内容”,不同的收件人可以根据需要写不同的内容。这里的内容在发送时是以纯文本格式发送的,在单元格里设置的格式均无效。

4) 第四列为“邮件附件”,附件必须带有完整的路径,且必须包括文件扩展名。

5) 第五列为“邮件签名”,签名必须带有完整的路径,且必须包括文件扩展名。这里的邮件签名是自动提取使用者邮箱里设置的签名,如果没有设置签名,那么将为空。

Excel中批量发送邮件

2、二、插入按钮

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

Excel中批量发送邮件

3、2、画出按钮

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

Excel中批量发送邮件

4、三、输入代码

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

Excel中批量发送邮件

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.Close

End Function

6、3、配置环境。

为了正确执行上面的代码,你还需要VBA编辑器中配置一下。

1) 在菜单中选择: 工具——〉引用

Excel中批量发送邮件

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

Excel中批量发送邮件

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

Excel中批量发送邮件

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

10、四、运行测试代码

1、取消控件编辑状态

点击下图红色圈中的“设计模式”按钮,取消刚才插入的控件的编辑状态。

Excel中批量发送邮件

11、2、运行代码

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

Excel中批量发送邮件

12、3、测试代码

如果上面的代码没有正常运行的话需要重新进入代码编辑器查找原因,解决问题。

以上的代码已经经过多次测试没有问题,完全可以正常运行。

Excel中批量发送邮件

13、五、保存模板

如果运行完上面的代码之后,还想保存此模板以备下次使用。那么按下保存按钮之后,Excel会跳出以下的对话框。

这时候就需要注意了,如果选择“Yes(是),Excel将以正常的Excel文件保存,默认的扩展名为.xlsx。这是我们是常用的Excel文件。刚才输入的代码将会自动清除。

因此如果要保留VBA代码,就一定要选择“No(否)”。

Excel中批量发送邮件

14、点击“No(否)”之后,在下面的“另存为”对话框中选择正确的文件类型,见下图中的蓝色条。这时候文件默认的扩展名为.xlsm。

XLSM是XLSX的启用了宏的版本,也就是在XLSX文件中添加了VBA代码。

Excel中批量发送邮件

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢