VBA程式語法 – 彙整筆記
◎ 語法 : 就是程式的文法。 設計者要與電腦溝通,就必須遵守這些語法規則。
這篇 VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,作整合記錄,方便大家在學習當下參考與使用。
目錄 :
Sub ……()
[ Sub ……() 用途 ] : 副程式宣告。
[ 語法說明 ]:
◎ Sub : 設計巨集(模組),是以 Sub ……( ) 來做程序宣告,系統會自動列出 End Sub,來當 Sub程序 結尾。
◎ ……( ) :『 …… 』是 Sub副程式名稱,用『 ( ) 』來結尾;( )內,可用來傳遞參數。
◎ End Sub : 結束 Sub程序。一個巨集(模組),可以有多個 Sub … End Sub,利用 Call指令 來互相呼叫。
[ 程式語法 ] :
Sub 副程式名稱()
程式碼
End Sub
[ 範例 ] : 取自 大盤漲跌幅歷史資料修補。
Sub 修補大盤漲跌幅歷史資料() ' 修補大盤漲跌幅歷史資料 是SUB副程式名稱。
......
End Sub
Call ……()
[ Call 用途 ] : 呼叫執行 Sub 副程式、 Function 函數程式或 動態連結程式庫(DLL)程式。
[ 程式語法 ] : Call 程式名稱()
◎ Call : 呼叫另一程式,可以是 Sub 副程式、 Function 函數程式或 動態連結程式庫(DLL)程式。
◎ ……() :『 …… 』是對應「 被呼叫的程式名稱 」。『 ( ) 』可不用;若想傳遞資料,可以在『 ( ) 』內,設定資料參數。
[ 範例 ] : 取自 製作 : 開啟檔案 – 自動執行程式
Private Sub Workbook_Open()
Call 儲存大盤當日資料
' Call 儲存大盤當日資料( ) -- 若想傳遞資料,可以在『 ( ) 』內,設定資料參數。
End Sub
Dim
[ Dim 用途 ] : 宣告變數的資料型態。
[ 程式語法 ] : Dim 變數名稱 As 變數資料型態
◎ Dim : 指定變數名稱。
◎ As : 指定變數的資料型態。而常用的資料型態,有下列幾種 :
[ 語法範例 ] :
Dim xR As Integer ‘ Dim 宣告變數 xR 為 Integer(整數) → [ 速寫 ] : Dim xR%。
For … Next
[ For … Next 用途 ] : 迴圈 / 指定電腦執行重複動作多少次。
[ 程式語法 ] :
For 迭代變數 = 起始值 To 最終值 [ Step 遞增(減)值 ]
程式碼 : [ Exit For ]
Next
[ 語法說明 ]:
◎ For : 迴圈語法的開頭。
◎ Step : 可不寫,預設值為 : 1。( 正值 : 遞增,負值 : 遞減 )
◎ Exit For : 跳離迴圈。一般會配合 If 或其他條件語句,來判斷是否提前跳離 For 迴圈。
◎ Next : For … Next 是一組語法,有 For 開頭,就必須要 Next 結尾,否則會出錯。
[ 語法範例 ] : 取自 大盤漲跌幅歷史資料修補。
For I = 6 To 8296 ' 迴圈:從 6(開始) 到 8296(結束)。
Range("F" & I) = Range("E" & I) - Range("E" & I - 1) ' 意思是 : F6位址 存放 ( E6欄 - E5欄 ) 所得來的差值。其程序一直隨 I值 遞增執行,直到 I值 = 8296 結束。
Range("G" & I) = Range("F" & I) / Range("E" & I) * 100
Next
For Each … In
[ For Each … In 用途 ] : 自動將 陣列 or 集合 中的元素逐一取出,讓程式依照取出賦予的迭代變數來處理迴圈內容。
[ 程式語法 ] :
For Each 迭代變數 In 陣列
程式碼 : [ Continue For ]
程式碼 : [ Exit For ]
Next
[ 語法說明 ]:
◎ 陣列 : 可為 陣列 或 集合。
◎ Continue For : 回歸 For Each 開頭。
◎ Exit For : 跳離迴圈。
◎ Next : For Each 的結尾。
[ 語法範例 ] : 取自 自動抓取單日CSV檔。
For Each xFile In fileFolder.Files ' 自動將月份目錄(fileFolder)裡的CSV檔(TWT93U_20221201.csv ~ TWT93U_20221219.csv),逐一取出,賦予 xFile。
xDate = Mid(xFile.Name, 8, 8)
Next
If … Then … Else
[ If … Then … Else 用途 ] : 條件判斷式。
[ 程式語法 ] :
If 判斷式 1 Then
程式碼 1
ElseIf 判斷式 2 Then
程式碼 2
……
Else
程式碼 N
End If
[ 語法說明 ]:
◎ 單條件 用法 : IF 若判斷式 1 條件成立(True),Then 然後執行 程式碼 1,End If 結束;若條件不成立(FALSE),則 End If 結束。
◎ 雙條件 用法 : IF 若判斷式 1 條件成立(True),Then 然後執行 程式碼 1,End If 結束;若條件不成立(FALSE),則跳至 ELSE 執行 程式碼 N,執行完 End If 結束。
◎ 三條件以上 用法 : IF 若判斷式 1 條件成立(True),Then 然後執行 程式碼 1,End If 結束;若條件不成立(FALSE),則執行 ElseIf 判斷式 2,判斷條件是否成立,再不成立,繼續 ElseIF 判斷式 3,直到最後一個條件,完成判斷後 End If 結束。( PS. Else 不一定要用在多條件判斷的最後一個判斷式。)
[ 語法範例 ] : 取自 大盤漲跌幅歷史資料修補。
If I = 6 Then ' IF(雙條件)判斷式
Range("F6") = Range("E6") - 9624.18
Range("G6") = Range("F6") / Range("E6") * 100
Else
Range("F" & I) = Range("E" & I) - Range("E" & I - 1)
Range("G" & I) = Range("F" & I) / Range("E" & I) * 100
End If
Do While … Loop
[ Do While … Loop 用途 ] : 有條件式的無限迴圈。
[ 程式語法 ] :
Do While 判斷式
…… : [ Exit For ]
Loop
[ 語法說明 ]:
◎ Do While : 後面緊隨個判斷式,若判斷式條件成立(True),便往下執行程序;若條件不成立(FALSE),則結束 Do While。
◎ Exit For : 跳離迴圈。一般會配合 If 或其他條件語句,來判斷是否提前跳離 Do While 迴圈。
◎ Loop : Do While 迴圈的終止點。程序執行到 Loop,則返回 Do While 起始點繼續執行,直到判斷式條件不成立(FALSE),才會終止。
[ 注意 ] : Do While 迴圈一經啟動,永久執行,除非有設定斷點,否則不會停止。( PS. 若程式設計失敗,造成永久迴圈,可試著按 : Ctrl + C 或 Ctrl + Break,來強制斷線,阻斷程式執行。)
[ 語法範例 ] : 取自 輕鬆幾步驟 - 抓取 外資買賣超歷史資料。
Do While ThisWorkbook.Connections.Count > 0
ThisWorkbook.Connections.Item(ThisWorkbook.Connections.Count).Delete
Loop
With … End With
[ With … End With 用途 ] : 針對指定物件進行結構化的陳述式。
[ 程式語法 ] :
With 物件(Obiect)
…… (陳述式)
End With
[ 語法說明 ]:
With : 後面緊隨個物件(Obiect)。( PS. ……… : 可對指定物件,做不同的屬性設定。
End With : With 的終止點。
[ 語法範例 ] : 取自 製作借券賣出排行榜 – 分析外資的心態。
With webXML
.Open "GET", "https://www.twse.com.tw/zh/exchangeReport/TWT93U", False '透過GET - 取得 證交所 - 網頁原始碼。
.send '傳送
End With
On Error
※ 當錯誤(Error)發生時,如何利用 On Error 來處理錯誤程序。系統提供三種方法 :
◎ On Error GoTo line : 當錯誤發生時,則跳轉到 line (標籤) 執行。[ ※ 標籤名稱 : line 後面,必須 +『 : 』,才是正確( line: )。]
◎ On Error Resume Next : 當錯誤發生時,則不理會,繼續執行下一動作。
◎ On Error GoTo 0 : 停用目前已啟動的錯誤處理機制。
[ 語法範例 ] : 取自 輕鬆幾步驟 - 抓取 外資買賣超歷史資料。
On Error GoTo xERROR
............
xERROR:
' 防呆機制 : 避免日期輸入錯誤,執行後,產生錯誤視窗。
V B A 資 源