用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 |