用Excel和OutLook實現自動批量發郵件

相信不少人的工作中都有這樣的情況,需要群發通知郵件的情況。

(比如財務付完款,要通知供應商,房東之類的)

但如果要發的郵件的收件人

要求的附件和郵件正文都不一樣,

且收件人數量極多,那這個工作量就很大。

雖然很多公司可以引進軟體解決這問題,

但更多的公司是不捨得花這個錢的。

這裡介紹一個僅靠Office就可以實現的方法

我會盡量備註注釋來解釋代碼的意思,

但如果還是看不懂,

請大家先自己進行一些VBA基礎知識的學習。

先按照上圖,用Excel做一個表格。

名為sheet1

然後alt+f11,呼出vba編輯器,insert ,選擇module,複製以下代碼。

Sub sendBatchMail() t = Timer 計時器開始Dim rowCount, endRowNoDim objOutlook As New Outlook.ApplicationDim objMail As MailItemDim sendIndexendRowNo = ThisWorkbook.Sheets("Sheet1").[a65535].End(xlUp).Row 取sheet1的最後一行是多少行Set objOutlook = New Outlook.ApplicationThisWorkbook.Sheets("sheet1").SelectFor 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).SendEnd WithSet objMail = NothingApplication.Wait (Now + TimeValue("0:00:15")) 發完一封郵件等15秒左右,覺得時間太久可以自己調整NextMsgBox "Done!" & Chr(10) & "Run time is " & Timer - t & "seconds" 結束後,顯示計時器結果End Sub

當然這是一個我已經簡化後的模型。

當你稍微了解一些代碼結構後,你完全可以自己修改一下代碼,

重新設計符合自己公司格式要求的程序。

下圖是我設計的簡單的模板,按鈕可以去設定中,quick access toolbar(快速工具欄)中

找到insert controls(插入控制項),然後就可以插入按鈕了。

按鈕放置後可以直接連接宏(assign macro),然後以後點擊即可運行。

(此方法適合發文字不多的通知,比如我司已於近日支付貴公司XX金額,請注意查收。

但不適合髮長信。)

本文主要是提供思路,

知乎是分享知識的平台,不是提供成品的地方,

伸手黨的私信我真沒工夫回……
推薦閱讀:

Excel里常見的錯誤值分別代表什麼意思?
需要頻繁使用Microsoft Office 2013,使用macbook pro會遇到哪些問題?
用Excel如何做相關的累計頻率和頻數的分析圖表?
excel動態數據地圖製作步驟!?
管理諮詢工作必備的excel技能有哪些?

TAG:MicrosoftExcel | VBA |