Sub ステートメント (Visual Basic)
Sub プロシージャを定義する名前、パラメーター、およびコードを宣言します。
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
指定項目
語句 |
定義 |
attributelist |
省略可能です。 「属性リスト」を参照してください。 |
Partial |
省略可能です。 部分メソッドの定義であることを示します。 「部分メソッド (Visual Basic)」を参照してください。 |
accessmodifier |
省略可能です。 次のいずれかの値を指定します。 「Visual Basic でのアクセス レベル」を参照してください。 |
proceduremodifiers |
省略可能です。 次のいずれかの値を指定します。
|
Shared |
省略可能です。 「Shared (Visual Basic)」を参照してください。 |
Shadows |
省略可能です。 「Shadows」を参照してください。 |
name |
必ず指定します。 プロシージャの名前を指定します。 「宣言された要素の名前 (Visual Basic)」を参照してください。 クラスのコンストラクターのプロシージャを作成するには、Sub プロシージャの名前を New キーワードにします。 詳細については、「オブジェクトの有効期間: オブジェクトの作成と破棄 (Visual Basic)」を参照してください。 |
typeparamlist |
省略可能です。 ジェネリック プロシージャの型パラメーターのリストを指定します。 「型リスト」を参照してください。 |
parameterlist |
省略可能です。 このプロシージャのパラメーターを表すローカル変数名のリストを指定します。 「パラメーターの一覧 (Visual Basic)」を参照してください。 |
Implements |
省略可能です。 このプロシージャが 1 つ以上の Sub プロシージャを実装しており、それぞれが、このプロシージャの包含クラスまたは構造体によって実装されているインターフェイスの中で定義されていることを示します。 Implements ステートメント を参照してください。 |
implementslist |
Implements が指定されている場合は、必ず指定します。 実装される Sub プロシージャのリストです。 implementedprocedure [ , implementedprocedure ... ] implementedprocedure の構文と指定項目は次のとおりです。 interface.definedname
指定項目説明
interface 必ず指定します。このプロシージャの包含クラスまたは構造体で実装されているインターフェイスの名前を指定します。
definedname 必ず指定します。interface の中でプロシージャを定義するために使われている名前を指定します。
|
Handles |
省略可能です。 このプロシージャが 1 つまたは複数の特定イベントを処理できることを示します。 Handles 句 (Visual Basic) を参照してください。 |
eventlist |
Handles が指定されている場合は、必ず指定します。 このプロシージャが処理するイベントのリストを指定します。 eventspecifier [ , eventspecifier ... ] eventspecifier の構文と指定項目は次のとおりです。 eventvariable.event
指定項目説明
eventvariable 必ず指定します。イベントを発生させるクラスまたは構造体のデータ型で宣言されたオブジェクト変数を指定します。
event 必ず指定します。このプロシージャが処理するイベントの名前を指定します。
|
statements |
省略可能です。 このプロシージャ内で実行するステートメントのブロックを指定します。 |
End Sub |
このプロシージャの定義を終了します。 |
解説
すべての実行可能コードはプロシージャ内に記述する必要があります。 呼び出し元のコードに値を返す必要がない場合は、Sub プロシージャを使用します。 値を返す必要がある場合は、Function プロシージャを使用します。
Sub は、モジュール レベルでのみ使用できます。 つまり、Sub プロシージャの宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、またはブロックでは宣言できません。 詳細については、「宣言コンテキストと既定のアクセス レベル (Visual Basic)」を参照してください。
Sub プロシージャは、既定ではパブリック アクセスになります。 アクセス修飾子を使用してこれらのアクセス レベルを調整できます。
規則
- 実装。 このプロシージャが Implements キーワードを使用する場合、プロシージャの包含クラスまたは構造体では、Class または Structure ステートメントの直後に Implements ステートメントが記述されている必要があります。 この Implements ステートメントには、implementslist で指定した個々のインターフェイスが含まれている必要があります。 ただし、インターフェイスが Sub プロシージャを定義するために使用する名前 (definedname で指定) と、このプロシージャの名前 (name で指定) を一致させる必要はありません。
動作
プロシージャから戻るときの動作 Sub プロシージャが呼び出し元コードに戻ると、そのプロシージャを呼び出したステートメントの次のステートメントから実行が継続します。
Exit Sub ステートメントと Return ステートメントは、Sub プロシージャを直ちに終了します。 プロシージャの任意の場所に、Exit Sub ステートメントと Return ステートメントを何度でも定義できます。また、Exit Sub ステートメントと Return ステートメントを混在して使用できます。
次の例は、Sub プロシージャから制御を戻す方法を示しています。
Sub mySub(ByVal q As String) Return End Sub
プロシージャの呼び出し。 Sub プロシージャは、Function プロシージャと同様に、パラメーターを受け取って一連のステートメントを実行する独立したプロシージャです。 しかし、Sub プロシージャは、値を返す Function プロシージャとは異なり、式の中に記述することはできません。
Sub プロシージャをステートメントの中から呼び出すには、プロシージャ名の後ろに引数リストをかっこで囲んで指定します。 指定する引数がない場合に限って、かっこを省略できます。 ただし、かっこを指定した方がコードの読みやすさは向上します。
Call ステートメントを使って Sub プロシージャを呼び出すこともできます。 この方法を使うと、コードの読みやすさが向上します。
トラブルシューティング
実行の順序 Visual Basic では、演算効率を高めるために数式が自動的に並べ替えられることがあります。 そのため、他のプロシージャを呼び出す式が引数リストに複数含まれている場合は、それらが特定の順序で呼び出されるとは限りません。
使用例
次の例では、Sub ステートメントを使って、Sub プロシージャの名前、パラメーター、および本体を構成するコードを定義しています。
Sub computeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub
参照
処理手順
方法: ジェネリック クラスを使用する (Visual Basic)
プロシージャのトラブルシューティング (Visual Basic)
方法 : 部分メソッドを作成する (Visual Basic)
参照
Function ステートメント (Visual Basic)