Excel VBA自動寄信程式:Word網路爬蟲及Outlook郵件清單

VBA是微軟為Office產品所附加的程式開發工具,所有Office家族都可以使用,只是Excel居多。本文介紹利用Word網路爬蟲取得網頁資料,Outlook再依照Excel郵件清單自動寄信。

這一節除了銜接上一節中將各個網頁改成以Word文書軟體取得之外,還會進一步介紹如何將這個Word文件作為附件檔案,透過Outlook寄送電子郵件。為了保留彈性,雖然直接於Outlook編程VBA程式碼,但是會引用Excel預先整理好的郵件項目清單,如此可以將工作中或生活中常常需要一再書寫的郵件,轉換成一個高度自動化的程式運作,以下具體介紹:

一、Word VBA爬蟲程式1

40:「Dim Headlines(0 To 14) As String, Headline As Variant」為宣告數列變數。上一節是先取得一系列的網址於Excel工作表,再設置迴圈依序取得每一個儲存格的內容、作為取得各個網頁資料的網址。這一節是直接使用Word,這是因為Word雖然也有表格,但是其主要對象為文本,總是不若天生為表格的Excel容易處理,所以這裡改用另外一種方法,將每一個標題定義成數列變數。

160:利用普通迴圈「For j = 0 To 14」,依序取得網頁上的新聞標題網址,同時定義為數列變數「Headlines(j)」

170~180:將新聞標題及其網址寫到Word文件。

二、取得新聞標題及網址

執行巨集「Word_TaxtNews_Headlines」,執行完畢Word文件出即出現標題及網址。

三、Word VBA爬蟲程式2

270~490:「For Each In…Next」是一種特別的「For…Next」循環語句,它循環的對象為集合或數列裡的每一個元素或項目。在這裡「Content」數列是一個個的網址,先巧妙利用「N」變數將先前的新聞標題數列「Headlines()」寫入Word,再搭配「ie」物件引用瀏覽器,依序取得新聞內容寫入。

四、取得新聞標題及文章

執行巨集「Word_TaxtNews_All」,過了一段時間,可以看到Word努力取得並寫入一個一個的新聞標題及文章。

五、Excel建立郵件清單

先在Excel整理好一份經常需要書寫的郵件清單,列明收件人、主旨、內文、附加檔案等相關資訊。

六、Outlook VBA程式碼

直接於Outlook設計如下VBA程式碼:

30~140:於Outlook引用Excel試算表,從這裡可以看VBA裡最根本的物件為「Application」,在互相引用時,以這裡為例,便是建立一個「ExcelMail」物件,然後再操作這個Excel物件時,只要把所有原本為「Application」的程式語法,改為「ExcelMail」即可,這個道理可說是類推適用在所有Office軟體的VBA設計中。

160~240:編寫和第六章第五節相同語法結構的程式,只不過這裡各個郵件項目,是前面從Excel已經定義好的變數。

七、執行程式選擇收信人

執行「Outlook_SendMail」巨集,首先是選擇類似成為一個範本的「郵件序號」。

八、Outlook自動寄信

神奇的事情發生了,Outlook果真依Excel指示發信!

Office綜合開發VBA程式

這一節最後有三點實戰經驗分享:

一、在第四節的時候,程式碼裡的變數「i」設定為「501」,到了一個月後必須設為「503」,這表示網頁結構變了,想要批量或持續執行相同程式的前提,是網頁結構也必須保持不變,否則有需要更新程式,這是運用程式取得網頁資料的先天性限制。

二、以這一節Outlook引用Excel清單、附加Word檔案來看,想完美達成某項任務,有時候單一應用軟體是不夠的,除了Excel、Word、Outlook各自運作之外,很多時候需要彼此結合,所幸Office套件皆為微軟所開發,IE瀏覽器更是取得網頁資料的利器,他們都可以在同一個VBA程式編輯平台設計、語法結構相同,很容易可以交互引用,發揮更大效益。

三、筆者在Outlook編寫VBA程式時,只要一嘗試輸入中文便會當掉,好幾次都是一樣,就連備註也沒有辦法,最後只得放棄再添加中文。這也是Office VBA的先天限制之一,畢竟原始軟體開發時為英文環境,縱使微軟苦心設計了多語言相容性套件的輔充,在軟體前台操作沒有什麼問題,但如果是在後台編寫VBA程式,依照筆者經驗偶爾會遇到無法解的困難,因此倘若是開發比較大型和複雜的VBA程式集,最好還是以英文為主。

每天學習,每天充電:VBA爬蟲文章合集

最新文章: