VBA程式語法

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

[ 語法範例 ] :
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 EachIn

[ 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),逐一取出,賦予 xFilexDate = 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 + CCtrl + 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 資 源

EXCEL & VBA功能 – 綜合筆記
◎ EXCEL & VBA功能 筆記 : 將針對文章中所使用的 EXCEL 及 VBA公式 / 工具操作 / 巨集設定 / 控制項的運用,做個整合記錄,方便大家在學習當下的參考與使用。

VBA指令 – 彙整筆記
◎ VBA 提供相當多的指令用法,VBA指令 彙整筆記,將會陸續記錄 VBA文章 中,所用過的 VBA指令,方便學員們對照運用。

VBA程式語法 – 彙整筆記
◎ 語法就是程式的文法。 使用者要與電腦溝通,就必須遵守這些規則。VBA程式語法 筆記 : 將針對 VBA文章 中所使用的 VBA程式語法,做個整合記錄,方便大家在學習當下參考與使用。