VBA Sub用法是自學時第一個會遇到的問題,本文以一個7行的小程式為範例,逐行說明它的意思是什麼?幫助讀者熟悉程式基本結構,準備成為Excel開發人員。
目錄
Toggle從Excel進入到VBA編輯環境,別人的程式代碼第一次看也許陌生,在此逐行編寫程式,說明每一個程式代碼的意義,以及可能會遇到的狀況。藉由完整從無到有編寫程式的過程,帶領讀者開始進入VBA程式的世界 。
一、VBA Sub是什麼
VBA程式通常是一個Sub程序,把「Sub」當作一篇寫滿程式的文章,文章第一行是標題行:「Sub」,空一格,接著是這篇文章的標題,也就是程式名稱,後面的「()」是為參數而保留的,Sub比較少用到,可以把它當作固定作用的結尾句點即可。
接下來的文章內文是一行行VBA程式碼,最後一行收尾是「End Sub」,表示這篇VBA程式碼文章結束了。

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

三、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裡表示同一行程式強制換行,所以它和下一行程式應該是要連在一起的,只不過這裡程式碼太長,分為兩行整篇程式文章較容易閱讀。

四、QueryTables.Add
寫第2行程式碼的時候,因為預計接下來都是被With打包的參數行,所以先按兩次Tab鍵縮排,
「ActiveSheet.QueryTables.Add」和Excel函數一樣,用左右掛號中間用逗點隔開兩個參數,一個是Connection,另外一個是Destination,分別是資料來源和下載資料的位置。這裡只不過是用了VBA特有的分行符「 _」把它分開成三行,合起來看結構很清楚。
「(Connection:=」後面接資料來源,這裡用「URL」(Uniform Resource Locator)告訴VBA資料型態是網頁網址,分號「;」後面接著便是網址。
「Destination:=Range(“$A$1”))意思是目的地為目前工作表A1儲存格,VBA會把取得的網頁資料放在這個地方。

五、程式參數的意思
.WebSelectionType = xlEntirePage
設定網頁型態,這裡是要取得整個網頁。
.WebFormatting = xlWebFormattingNone
設定網頁格式,這裡是不引用原有網頁的格式
.Refresh BackgroundQuery:=False
設定背景查詢更新為False,VBA下載網頁才不會受到Excel操作的影響。
這三個重要參數設定的英文字面上意義不難理解,也都適當表達程式將執行的功能,不過要注意這是程式語言,必須一字不差。

六、VBA Sub用法
最後加上「End With」,結束「With……End With」的段落,再加上「End Sub」,結束「Sub……End Sub」的段落,全部程式就寫好了,結構非常清楚。
從頭到尾看一次這個Sub程序,應該能理解每一行程式代碼的意思了。沒疑問的話,上方工具列的「執行」下拉,點選「執行Sub或UserFrom F5」,執行所寫好的程式。

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

VBA自學的方法之一
程式比較難的部份是在設計開發,一旦設計好了,照樣造句是很快的。例如這一節程式範例裡面的網址部份,讀者應該可以想像,複製另外一個網址複製貼上取代,馬上變成是取得所貼上網址的網頁程式了。贊贊小屋VBA程式庫有提供設計好的範例,讀者學會了VBA Sub用法,可以前往複製程式範例試看看。不過在這之前,建議可以將本篇文章7行一字一句寫出完整程式,用意是藉此熟悉VBA編輯環境和書寫程式的過程,如此才能將範例照樣造句到自己的工作應用上。
微軟說明手冊:呼叫 Sub 和函式程序。
本文章講解影片:

想學習更多相關知識嗎?歡迎前往VBA自學中心: