共用方式為


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 無法搭配 ByValByRefOptional 一起使用。
varname 此為必要動作。 代表參數的變數名稱;遵循標準變數命名規則。
type 選用。 傳遞給程序的參數資料型態;可能是位元組布林、整數貨幣雙、十 (進位(目前不支援) )、日期字串 (僅可變長度的) 、物件變體或特定物件類型。 若參數非 可選,亦可指定 使用者自訂型別
預設值 選用。 任何 常數 或恆定 的表達式。 僅適用於 可選 參數。 如果型別是 物件,則明確的預設值只能是 Nothing

註解

若未明確指定使用 公開私人好友 程序預設為公開程序。

若未使用 Static ,則呼叫間不保留本地變數的值。

Friend關鍵字只能在職業模組中使用。 然而, Friend 程序可由專案任一模組中的程序存取。 Friend 程序不會出現在其父類別的型別庫中,也不會是遲綁的。

程序可以是遞迴的;也就是說,他們可以自稱執行特定任務。 然而,遞迴可能導致堆疊溢位。 靜態關鍵字通常不會用於遞迴程序。

所有可執行程式碼都必須在 程序中。 你不能在另一個函式屬性程序中定義程序。

Exit Sub 關鍵字會立即退出 Sub 程序。 程式執行會以呼叫 程序的陳述句後續進行。 任意數量的 退出子 語句可以出現在 程序的任何地方。

函式 程序類似, 程序是一個獨立的程序,可以接收參數、執行一連串語句,並改變其參數的值。 然而,與回傳值的 函式 程序不同, Sub 程序不能用於表達式。

你可以透過程序名稱加上參數清單來呼叫 程序。 有關如何呼叫程序的具體資訊,請參閱呼叫說明書。

程序中使用的變數分為兩類:程序中明確宣告的變數與未宣告的。 在程序中明確宣告使用 Dim 或等效) 的變數 (總是在程序中本地。 在程序中使用但未明確宣告的變數也屬於局部變數,除非它們在程序外的某個更高層級明確宣告。

程序可以使用未在程序中明確宣告的變數,但若模組 級定義的變數名稱相同,可能會發生命名衝突。 如果你的程序參考的是一個未宣告變數,且該變數名稱與其他程序、常數或變數相同,則假設程序指涉的是該模組層級名稱。 為避免此類衝突,明確宣告變數。 使用 選項明確 陳述式強制明確宣告變數。

注意事項

你不能用 GoSubGoToReturn 來進入或退出 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 支援與意見反應