瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解

Excel VBA通常以Sub開始End Sub結束,中間由上而下是要執行的命令。本文介紹如何從零開始寫出簡單的網路爬蟲程式,加強基本觀念同時逐行解說各程式碼作用。

上一節已經從Excel進入到VBA編輯環境,也看到取得網頁資料的程式代碼。第一次看也許陌生,這一節將逐行編寫程式,說明每一個程式代碼的意義,以及可能會遇到的狀況。藉由完整從無到有編寫程式的過程,讀者開始進入VBA程式的世界 。

一、VBA Sub程序

VBA程式通常是一個Sub程序,把「Sub」當作一篇寫滿程式的文章,文章第一行是標題行:「Sub」,空一格,接著是這篇文章的標題,也就是程式名稱,後面的「()」是為參數而保留的,Sub比較少用到,可以把它當作固定作用的結尾句點即可。

接下來的文章內文是一行行VBA程式碼,最後一行收尾是「End Sub」,表示這篇VBA程式碼文章結束了。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 1

二、Sub…End Sub

有了上個步驟的理解,開始於VBA編寫第一個Sub程序。編寫Excel VBA程式和在Word寫文章是一樣的,第一行輸入「Sub 取得網頁資料()」,按Enter鍵換行,VBA會幫忙自動產生「End Sub」。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 3

三、With…End with

和寫文章一樣,最好先按Enter鍵換行,換行後按一次Tab鍵,游標會往右邊跳約兩個字元,然後再寫第1行程式碼:「With ActiveSheet.QueryTables.Add _」,寫完再按Enter鍵換行。保持換行和縮排習慣,當程式碼越來越多時,結構才會清楚,程式容易閱讀理解。

寫VBA程式碼的時候,所有的英文單字小寫就好了,按下Enter鍵換行的時候,編輯器會自動把那一行程式閱讀掃描一遍,沒問題的話會把小寫轉換成大寫。

前面提到Sub和End Sub是成對出現,這裡的With後面一樣也是要接一個End With。Excel的每個函數通常有兩個以上的參數,會用左右括號包起來,VBA裡的「With……End With」是類似作用,被包括起來的是某個對象或指令,中間一行一行是各個參數的描述。

「ActiveSheet.QueryTables.Add」便是這裡With……End with包起來的指令,這個指令會在目前工作表(ActiveSheet)新增一個查詢表格(QueryTables.Add),所以其實VBA是用簡單的英文告訴Excel該做什麼,只不過因為是寫給機器人看的,文法必須非常嚴謹,Excel才能看得懂。這一行程式是VBA取得網頁資料的動詞,這裡毋須思考為什麼是這樣子寫,把它當做一個英文單詞記起來。

結尾的「 _」是空一格再一個下橫線,在VBA裡表示同一行程式強制換行,所以它和下一行程式應該是要連在一起的,只不過這裡程式碼太長,分為兩行整篇程式文章較容易閱讀。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 5

四、QueryTables.Add

寫第2行程式碼的時候,因為預計接下來都是被With打包的參數行,所以先按兩次Tab鍵縮排,

「ActiveSheet.QueryTables.Add」和Excel函數一樣,用左右掛號中間用逗點隔開兩個參數,一個是Connection,另外一個是Destination,分別是資料來源和下載資料的位置。這裡只不過是用了VBA特有的分行符「 _」把它分開成三行,合起來看結構很清楚。

「(Connection:=」後面接資料來源,這裡用「URL」(Uniform Resource Locator)告訴VBA資料型態是網頁網址,分號「;」後面接著便是網址。

「Destination:=Range(“$A$1”))意思是目的地為目前工作表A1儲存格,VBA會把取得的網頁資料放在這個地方。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 7

五、網路爬蟲參數

.WebSelectionType = xlEntirePage

設定網頁型態,這裡是要取得整個網頁。

.WebFormatting = xlWebFormattingNone

設定網頁格式,這裡是不引用原有網頁的格式

.Refresh BackgroundQuery:=False

設定背景查詢更新為False,VBA下載網頁才不會受到Excel操作的影響。

這三個重要參數設定的英文字面上意義不難理解,也都適當表達程式將執行的功能,不過要注意這是程式語言,必須一字不差。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 9

六、直接執行Sub

最後加上「End With」,結束「With……End With」的段落,再加上「End Sub」,結束「Sub……End Sub」的段落,全部程式就寫好了,結構非常清楚。

從頭到尾看一次這個Sub程序,應該能理解每一行程式代碼的意思了。沒疑問的話,上方工具列的「執行」下拉,點選「執行Sub或UserFrom F5」,執行所寫好的程式。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 11

七、取得網頁資料

Windows系統回到Excel視窗,等VBA程式執行完畢後,在Excel工作表已經成功取得網頁資料。如果沒有要再編輯VBA程式,直接將VBA視窗關掉即可,它是Excel外掛,關掉VBA不影響Excel操作。

瞭解VBA Sub及End Sub基本結構,網路爬蟲程式講解 13

程式也可以照樣造句

程式比較難的部份是在設計開發,一旦設計好了,照樣造句是很快的。例如這一節程式範例裡面的網址部份,讀者應該可以想像,複製另外一個網址複製貼上取代,馬上變成是取得所貼上網址的網頁程式了。

本書所有的程式範例都已經設計好了,讀者不用擔心沒有寫程式的基礎。VBA程式其實也可以用匯出匯入的方式快速取得,這一節作者建議讀者還是一字一句寫出完整程式,用意是讀者藉此熟悉VBA編輯環境和書寫程式的過程,如此才能將範例照樣造句到自己的工作應用上。

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

本文內容取自《人人都學得會的網路大數據分析入門》,書本仍然是最好的學習方法,省下一張電影票的錢,今天就買本書吧!