幫同事做了一個(gè)在 Excel 中用 VBA 發(fā)郵件的程序,逐行讀取 Excel 表格記錄中的待發(fā)郵件主題、內容及收件人進(jìn)行發(fā)送。首先想到也是看看能否使用 Outlook 的組件,網(wǎng)上查了查,果然有,現把代碼貼出來(lái)如下:
01.'使用 Outlook 來(lái)發(fā)送郵件了
02.Sub SendEmailByOutlook()
03.
04. '要能正確發(fā)送并需要對Microseft Outlook進(jìn)行有效配置
05. On Error Resume Next
06. Dim rowCount, endRowNo
07. Dim objOutlook As New Outlook.Application
08. Dim objMail As MailItem
09.
10. '取得當前工作表與Cells(1,1)相連的數據區行數
11. endRowNo = Cells(1, 1).CurrentRegion.Rows.Count
12.
13. '創(chuàng )建objOutlook為Outlook應用程序對象
14. Set objOutlook = New Outlook.Application
15.
16. '開(kāi)始循環(huán)發(fā)送電子郵件,比如從第二行開(kāi)始,第一行是標題
17. For rowCount = 2 To endRowNo
18.
19. '創(chuàng )建objMail為一個(gè)郵件對象
20. Set objMail = objOutlook.CreateItem(olMailItem)
21. With objMail
22.
23. '設置收件人地址(比如從 Excel 表的第一列“E-mail地址”字段中獲得)
24. .To = Cells(rowCount, 1).Value '"fantasia@sina.com"
25.
26. '設置郵件主題(比如從 Excel 表的第二列“郵件主題”字段中獲得)
27. .Subject = Cells(rowCount, 2).Value '"郵件主題"
28.
29. '設置郵件內容(比如從 Excel 表的第三列“郵件內容”字段中獲得)
30. .Body = Cells(rowCount, 3).Value '"郵件內容"
31.
32. '設置附件(比如從 Excel 表的第四列“附件”字段中獲得)
33. .Attachments.Add Cells(rowCount, 4).Value '"c:\\users.ctl"
34.
35. .Send
36.
37. End With
38.
39. '銷(xiāo)毀objMail對象
40. Set objMail = Nothing
41.
42. Next
43.
44. '銷(xiāo)毀objOutlook對象
45. Set objOutlook = Nothing
46.
47.End Sub
Excel 中貼個(gè)按鈕,單擊事件指向到這個(gè)過(guò)程。Excel 的 Visual Basic 編輯器中還必須引用 Microsoft Outlook 11.0 Object Library,具體組件名視你安裝的 Outlook 版可能有所不同。只能使用 Outlook 而不是 Outlook Express。
您必須對 Outlook 進(jìn)行了正確的配置,即達到能使用默認帳戶(hù)發(fā)送郵件,上面代碼實(shí)現的就是使用 Outlook 的默認帳戶(hù)來(lái)發(fā)送郵件。
這種方法有一個(gè)很要命的問(wèn)題就是,每發(fā)一封的時(shí)候會(huì )彈出一個(gè) Outlook 的安全提示,如圖:

一個(gè)個(gè)“是” 吧,這一定會(huì )讓你厭其煩的,有說(shuō)用 SendKeys 或別的軟件來(lái)自動(dòng)“是”,但都不太美妙。還不能真正達到全自動(dòng)批量發(fā)郵件的效果。倒是在 Outlook Express 和 Outlook 2007 的安全設置中有這么一個(gè)選項“當別的應用程序試圖用我的名義發(fā)送電子郵件時(shí)警告我(W)” 的可選項,可是一則 VBA 不知如何使用 Outlook Express,二則我電腦里沒(méi)安裝 2007 這么高級版本。所以得另尋他法了,那就是 JMail 組件。
聯(lián)系客服