Sub ステートメント
Sub プロシージャの名前、引数を宣言し、Sub プロシージャの始まりを示します。
[Public [Default] | Private] Sub name [(arglist)]
[statements]
[Exit Sub]
[statements]
End Sub
引数
- Public
すべてのスクリプトのすべてのプロシージャから参照できる Sub プロシージャを宣言するときに指定します。 - Default
Class のキーワード Public と共にのみ使用し、Sub プロシージャをクラスの既定のメソッドに指定します。1 つのクラスで複数の Default プロシージャを指定するとエラーとなります。 - Private
Sub プロシージャを記述したスクリプト内のプロシージャ内からのみ参照できるプロシージャを宣言するときに指定します。 - name
定義する Sub プロシージャの名前を指定します。変数の標準的な名前付け規則に従って名前を付けます。 - arglist
Sub プロシージャを呼び出すときに、Sub プロシージャに渡す引数を表す変数のリストを指定します。複数の変数を指定するときは、カンマ (,) で区切ります。 - statements
Sub プロシージャ内で実行される、一連のステートメントを指定します。
arglist の構文と指定項目は次のとおりです。
[ByVal | ByRef] varname[( )]
引数
- ByVal
その引数が、値渡しで渡されることを示します。 - ByRef
その引数が、参照渡しで渡されることを示します。 - varname
引数として渡す変数名を指定します。変数の標準的な名前付け規則に従って名前を付けます。
解説
キーワード Publicまたはキーワード Privateを指定しない場合、Sub プロシージャは既定のパブリック プロシージャとなり、スクリプト内の他のすべてのプロシージャから参照できます。Sub プロシージャ内のローカル変数の値は、プロシージャの実行が終了すると破棄されます。
Sub プロシージャを Function プロシージャや Property Get プロシージャなど、他のプロシージャの中で定義することはできません。
Exit Sub ステートメントは、Sub プロシージャを直ちに終了します。プログラムの実行は、その Sub プロシージャを呼び出したステートメントの次のステートメントから継続されます。Exit Sub ステートメントは、Sub プロシージャ内の任意の場所に必要に応じていくつでも指定できます。
Sub プロシージャと Function プロシージャには、似た点と異なる点があります。引数を受け取って一連のステートメントを実行し、引数の値を変えることができる点は似ています。しかし、Sub プロシージャは、値を返す Function プロシージャと異なり値を返さないため、式の中に記述することはできません。
Sub プロシージャを呼び出すには、プロシージャ名の後ろに引数リストを付けて指定します。Sub プロシージャの呼び出し方法については、Call ステートメントを参照してください。
注意 Sub プロシージャは、再帰的にプロシージャ自体を呼び出すことができます。ただし、再帰呼び出しを行うと、スタックがオーバーフローする可能性があります。
Sub プロシージャで使用する変数には、Sub プロシージャ内で明示的に宣言される変数と、それ以外の変数の 2 種類があります。プロシージャ内で Dim ステートメントなどを使って明示的に宣言された変数は、そのプロシージャの中だけで有効なローカル変数になります。プロシージャ内で明示的に宣言されていない変数も、そのプロシージャの外部のさらに上のレベルで明示的に宣言されていない限りは、ローカル変数となります。
注意 プロシージャ内で明示的に宣言されていない変数をプロシージャ内で使うことはできますが、その変数と同じ名前の変数などがスクリプト レベルで定義されている場合、名前の競合が発生します。あるプロシージャが、他のプロシージャ、定数または変数と同じ名前を持つ未宣言の変数を参照した場合、そのプロシージャはスクリプト レベルの名前を参照しているものと見なされます。このような名前の競合を避けるために、Option Explicit ステートメントを使い、変数を明示的に宣言してください。
必要条件
参照
Call ステートメント | Dim ステートメント | Exit ステートメント | Function ステートメント