解读VBA Script
Sub 过程是一系列 Visual Basic 语句,由 Sub 语句和 End Sub 语句括起来,这些语句执行操作但不返回值。 Sub 过程可采用参数,例如通过调用过程传递的常量、变量或表达式。 如果 Sub 过程没有参数,则 Sub 语句必须包括一组空括号。
Sub sendMail()
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim lastRow As Long
Dim i As Long
' 创建Outlook应用程序
Set OutlookApp = CreateObject("Outlook.Application")
' 获取工作表
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") ' 修改为您的工作表名称
' 获取最后一行
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
' 循环发送邮件
For i = 2 To lastRow ' 假设第一行是标题,数据从第二行开始
' 创建新邮件
Set OutlookMail = OutlookApp.CreateItem(0)
' 设置收件人、抄送、主题和正文
OutlookMail.To = ws.Cells(i, 1).Value ' 收件人列
OutlookMail.CC = ws.Cells(i, 2).Value ' 抄送列
OutlookMail.Subject = ws.Cells(i, 3).Value ' 主题列
OutlookMail.Body = ws.Cells(i, 4).Value ' 正文列
' 发送邮件
OutlookMail.Send
' 释放对象
Set OutlookMail = Nothing
Next i
' 释放Outlook应用程序对象
Set OutlookApp = Nothing
End Sub
DIM就是定义一个变量,第一个就是把OutlookApp(自定义)的变成object的数据类型。也就是通俗一点,把A定义成动物。电脑会识别A为动物。
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim lastRow As Long
Dim i As Long
创建Outlook应用程序,类似于打开Outlook
Set OutlookApp = CreateObject("Outlook.Application")
1.获取工作簿
2.修改为工作簿里sheet的名称
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") '
获取工作簿中的最后一行,固定搭配
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).Row
For循环解读:
1.for i=2 to lastRow i就是一个变量 从下文理解就是 i=行,To lastRow 就是循环从第二行到最后一行。
2.Set OutlookMail = OutlookApp.CreateItem(0)创建新邮件。
3.从OutlookMail.**<Outlook里的item项>**,就比如说发件人那就是outlookmail.sender;然后ws.Cells(i,1).value就是上面自定义的变量ws也就是你上面发给我的excel,也就是读取第二行第一列的值作为收件人。
4.outlookmail.send 就是发送邮件,固定搭配 ,有官方文档可以参考。
5.发送完之后需要释放被占用的对象,所以需要写一句 Set OutlookMail = Nothing
6.最后for循环结尾 Next i 意思就是换行继续执行以上操作,直到excel的最后一行。
For i = 2 To lastRow ' 假设第一行是标题,数据从第二行开始
' 创建新邮件
Set OutlookMail = OutlookApp.CreateItem(0) ' 0表示邮件
' 设置收件人、抄送、主题和正文
OutlookMail.To = ws.Cells(i, 1).Value ' 收件人列
OutlookMail.CC = ws.Cells(i, 2).Value ' 抄送列
OutlookMail.Subject = ws.Cells(i, 3).Value ' 主题列
OutlookMail.Body = ws.Cells(i, 4).Value ' 正文列
' 发送邮件
OutlookMail.Send
' 释放对象
Set OutlookMail = Nothing
Next i
1.全部发送完,比如16个都发送完毕,则会退出for循环,此时我们的目的已经达到,所以我们需要释放被占用的对象,也就是application
2.固定搭配 End Sub 一个程序语句的结尾 一般是写完Sub xxx()后 立马要补充End Sub
' 释放Outlook应用程序对象
Set OutlookApp = Nothing
End Sub
在Excel里创建按钮
1.打开”开发人员”选项卡,选择”插入”->”按钮(ActiveX控件)”,然后在工作簿上绘制一个按钮
2.创建按钮后,双击按钮以打开代码编辑器。将以下代码复制并粘贴到按钮的Click事件(点击后会发生的事情)中:
Private Sub CommandButton1_Click()
sendMail
Enb Sub
返回工作簿点击按钮进行测试。
参考博客:在VBA中,使用Outlook对象库可以访问和操作Outlook应用程序中的邮件项
官方文档:Office VBA 参考