Sub ステートメント (Visual Basic)
更新 : 2007 年 11 月
Sub プロシージャを定義する名前、パラメータ、およびコードを宣言します。
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
指定項目
attributelist
省略可能です。「属性リスト」を参照してください。Partial
省略可能です。部分メソッドの定義であることを示します。「部分メソッド」を参照してください。accessmodifier
省略可能です。次のいずれかになります。Visual Basic でのアクセス レベル を参照してください。
proceduremodifiers
省略可能です。次のいずれかになります。MustOverride Overrides
NotOverridable Overrides
Shared
省略可能です。「Shared (Visual Basic)」を参照してください。Shadows
省略可能です。「Shadows」を参照してください。name
必ず指定します。プロシージャの名前を指定します。宣言された要素の名前 を参照してください。typeparamlist
省略可能です。ジェネリック プロシージャの型パラメータのリストを指定します。「型リスト」を参照してください。parameterlist
省略可能です。このプロシージャのパラメータを表すローカル変数名のリストを指定します。パラメータの一覧 を参照してください。Implements
省略可能です。このプロシージャが 1 つ以上の Sub プロシージャを実装しており、それぞれが、このプロシージャの包含クラスまたは構造体によって実装されているインターフェイスの中で定義されていることを示します。Implements ステートメント を参照してください。implementslist
Implements が指定されている場合は、必ず指定します。実装される Sub プロシージャのリストを指定します。implementedprocedure [ , implementedprocedure ... ]
implementedprocedure の構文と指定項目は次のとおりです。
interface.definedname
指定項目
説明
interface
必ず指定します。このプロシージャの包含クラスまたは構造体で実装されているインターフェイスの名前を指定します。
definedname
必ず指定します。interface の中でプロシージャを定義するために使われている名前を指定します。
Handles
省略可能です。このプロシージャが 1 つまたは複数の特定イベントを処理できることを示します。Handles を参照してください。eventlist
Handles が指定されている場合は、必ず指定します。このプロシージャが処理するイベントのリストを指定します。eventspecifier [ , eventspecifier ... ]
eventspecifier の構文と指定項目は次のとおりです。
eventvariable.event
指定項目
説明
eventvariable
必ず指定します。イベントを発生させるクラスまたは構造体のデータ型で宣言されたオブジェクト変数を指定します。
event
必ず指定します。このプロシージャが処理するイベントの名前を指定します。
statements
省略可能です。このプロシージャ内で実行するステートメントのブロックを指定します。EndSub
このプロシージャの定義を終了します。
解説
すべての実行可能コードはプロシージャ内に記述する必要があります。呼び出し元のコードに値を返す必要がない場合は、Sub プロシージャを使用します。値を返す必要がある場合は、Function プロシージャを使用します。
Sub は、モジュール レベルでのみ使用できます。つまり、Sub プロシージャの宣言コンテキストは、クラス、構造体、モジュール、またはインターフェイスであることが必要で、ソース ファイル、名前空間、プロシージャ、またはブロックでは宣言できません。詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。
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)