語法
[ 私人] | 公 | 朋友 ][ 雜訊 ] 子名稱 [ ( arglist ) ]
[ statements ]
[ 出口字幕 ]
[ statements ]
字幕結束
Sub 語句語法包含以下部分:
| 部分 | 描述 |
|---|---|
| Public | 選用。 表示 子 程序可被所有 模組中的其他程序存取。 若用於包含 選擇私有 聲明的模組,該程序在 專案外部無法取得。 |
| Private | 選用。 表示 Sub 程序僅能被宣告的模組中其他程序存取。 |
| Friend | 選用。 僅用於 類別模組。 表示 子 程序在 整個專案中可見,但對物件實例的控制器則不可見。 |
| Static | 選用。 表示 Sub 程序的局部 變數 在呼叫間被保留。 Static 屬性不會影響在 Sub 外宣告的變數,即使它們在程序中使用。 |
| name | 此為必要動作。 分班名稱;遵循標準變數命名規則。 |
| arglist | 選用。 代表子程序呼叫時傳遞給 參數 的變數列表。 多個變數以逗號分隔。 |
| 陳述式 | 選用。 在子程序中執行的任何一組語句。 |
arglist 引數具有下列語法和部分︰
[ 可選 ][ ByVal | 參考文獻 ][ 參數陣列 ] varname [ ( ) ] [ 類型] [=預設值 ]
| 部分 | 描述 |
|---|---|
| Optional | 選用。 關鍵字表示不需要論證。 若使用, arglist 中所有後續參數也必須為可選,並以 Optional 關鍵字宣告。 如果已使用 ParamArray ,則不能在任何引數中使用 Optional 。 |
| ByVal | 選用。 表示引數以傳值方式傳遞。 |
| ByRef | 選用。 表示引數以傳參考方式傳遞。 ByRef 是 VBA 的預設,與 Visual Basic .NET 不同。 |
| ParamArray | 選用。 僅作為 arglist 的最後一個參數,表示最後一個參數是 Variant 元素的可選陣列。 ParamArray 關鍵字可讓您提供引數的任意數。 ParamArray 無法搭配 ByVal、 ByRef 或 Optional 一起使用。 |
| varname | 此為必要動作。 代表參數的變數名稱;遵循標準變數命名規則。 |
| type | 選用。 傳遞給程序的參數資料型態;可能是位元組、布林、整數、長、貨幣、單、雙、十 (進位(目前不支援) )、日期、字串 (僅可變長度的) 、物件、變體或特定物件類型。 若參數非 可選,亦可指定 使用者自訂型別 。 |
| 預設值 | 選用。 任何 常數 或恆定 的表達式。 僅適用於 可選 參數。 如果型別是 物件,則明確的預設值只能是 Nothing。 |
註解
若未明確指定使用 公開、 私人或 好友, 子 程序預設為公開程序。
若未使用 Static ,則呼叫間不保留本地變數的值。
Friend關鍵字只能在職業模組中使用。 然而, Friend 程序可由專案任一模組中的程序存取。 Friend 程序不會出現在其父類別的型別庫中,也不會是遲綁的。
子 程序可以是遞迴的;也就是說,他們可以自稱執行特定任務。 然而,遞迴可能導致堆疊溢位。 靜態關鍵字通常不會用於遞迴子程序。
所有可執行程式碼都必須在 程序中。 你不能在另一個子、函式或屬性程序中定義子程序。
Exit Sub 關鍵字會立即退出 Sub 程序。 程式執行會以呼叫 子 程序的陳述句後續進行。 任意數量的 退出子 語句可以出現在 子 程序的任何地方。
與 函式 程序類似, 子 程序是一個獨立的程序,可以接收參數、執行一連串語句,並改變其參數的值。 然而,與回傳值的 函式 程序不同, Sub 程序不能用於表達式。
你可以透過程序名稱加上參數清單來呼叫 子 程序。 有關如何呼叫子程序的具體資訊,請參閱呼叫說明書。
子程序中使用的變數分為兩類:程序中明確宣告的變數與未宣告的。 在程序中明確宣告使用 Dim 或等效) 的變數 (總是在程序中本地。 在程序中使用但未明確宣告的變數也屬於局部變數,除非它們在程序外的某個更高層級明確宣告。
程序可以使用未在程序中明確宣告的變數,但若模組 層 級定義的變數名稱相同,可能會發生命名衝突。 如果你的程序參考的是一個未宣告變數,且該變數名稱與其他程序、常數或變數相同,則假設程序指涉的是該模組層級名稱。 為避免此類衝突,明確宣告變數。 使用 選項明確 陳述式強制明確宣告變數。
注意事項
你不能用 GoSub、 GoTo 或 Return 來進入或退出 Sub 程序。
範例
此範例使用 Sub 陳述句來定義構成 Sub 程序主體的名稱、參數與程式碼。
' Sub procedure definition.
' Sub procedure with two arguments.
Sub SubComputeArea(Length, TheWidth)
Dim Area As Double ' Declare local variable.
If Length = 0 Or TheWidth = 0 Then
' If either argument = 0.
Exit Sub ' Exit Sub immediately.
End If
Area = Length * TheWidth ' Calculate area of rectangle.
Debug.Print Area ' Print Area to Debug window.
End Sub
另請參閱
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。