转自:https://zhuanlan.zhihu.com/p/25283201
作者:
相信不少人的工作中都有这样的情况,需要群发通知邮件的情况。
(比如财务付完款,要通知供应商,房东之类的)
但如果要发的邮件的收件人
要求的附件和邮件正文都不一样,
且收件人数量极多,那这个工作量就很大。
虽然很多公司可以引进软件解决这问题,
但更多的公司是不舍得花这个钱的。
这里介绍一个仅靠Office就可以实现的方法
我会尽量备注注释来解释代码的意思,
但如果还是看不懂,
请大家先自己进行一些VBA基础知识的学习。
先按照上图,用Excel做一个表格。
名为sheet1
然后alt+f11,呼出vba编辑器,insert ,选择module,复制以下代码。
Sub sendBatchMail()
t = Timer '计时器开始
Dim rowCount, endRowNo
Dim objOutlook As New Outlook.Application
Dim objMail As MailItem
Dim sendIndex
endRowNo = ThisWorkbook.Sheets("Sheet1").[a65535].End(xlUp).Row
'取sheet1的最后一行是多少行
Set objOutlook = New Outlook.Application
ThisWorkbook.Sheets("sheet1").Select
For rowCount = 2 To endRowNo '循环从第二行运行到最后一行
Set objMail = objOutlook.CreateItem(olMailItem)
subjectname = ThisWorkbook.Sheets("sheet1").Range("b" & rowCount) '赋值邮件名
bodyname = ThisWorkbook.Sheets("sheet1").Range("c" & rowCount) '赋值邮件正文
attach_address = ThisWorkbook.Sheets("sheet1").Range("d" & rowCount)
'赋值附件所在的地址链接
With objMail
.To = Cells(rowCount, 1)
.Attachments.Add attach_address
.Body = bodyname
.Subject = subjectname
.sendIndex = rowCount Mod objOutlook.Session.Accounts.Count + 1
'要发的邮件分到服务器上
.SendUsingAccount = objOutlook.Session.Accounts.Item(sendIndex)
.Send
End With
Set objMail = Nothing
Application.Wait (Now + TimeValue("0:00:15"))
'发完一封邮件等15秒左右,觉得时间太久可以自己调整
Next
MsgBox "Done!" & Chr(10) & "Run time is " & Timer - t & "seconds"
'结束后,显示计时器结果
End Sub
当然这是一个我已经简化后的模型。
当你稍微了解一些代码结构后,你完全可以自己修改一下代码,
重新设计符合自己公司格式要求的程序。
下图是我设计的简单的模板,按钮可以去设定中,quick access toolbar(快速工具栏)中
找到insert controls(插入控件),然后就可以插入按钮了。
按钮放置后可以直接连接宏(assign macro),然后以后点击即可运行。
(此方法适合发文字不多的通知,比如我司已于近日支付贵公司XX金额,请注意查收。 但不适合发长信。)本文主要是提供思路,
知乎是分享知识的平台,不是提供成品的地方,
伸手党的私信我真没工夫回……