Sub 陳述式

宣告構成子程序主體的名稱、參數與程式碼。

語法

[ 私人] | 公共 | 朋友 ][ 雜訊 ] 子名稱 [ ( 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 支援與意見反應。