変数のスコープ (Visual Basic 6.0 ユーザー向け)
更新 : 2007 年 11 月
Visual Basic 2008 では、ブロック スコープをサポートし、構造化プログラミングを強化するため、ローカル変数のスコープが更新されています。
Visual Basic 6.0
Visual Basic 6.0 では、プロシージャ内で宣言された変数はプロシージャ スコープを持ちます。したがって、同じプロシージャ内のどこからでもアクセスできます。変数がブロック内で宣言されている場合、つまり End、Loop、または Next ステートメントで終了するステートメント セット内で宣言されている場合、変数はブロック外部からでもアクセスできます。
次のコード例では、プロシージャのスコープを示しています。ここでは、ブロックは For ループです。
For I = 1 To 10
Dim N As Long = 0
' N has procedure scope although it was declared within a block.
N = N + Incr(I)
Next I
W = Base ^ N
' N is still visible outside the block it is declared in.
Visual Basic 2005
Visual Basic 2008 では、ブロック内で宣言された変数はブロック スコープを持ち、ブロックの外部からはアクセスできません。上の例は次のように書き換えることができます。
Dim N As Long = 0
' N is declared outside the block and has procedure scope.
For I As Integer = 1 To 10
' I is declared by the For statement and therefore within the block.
N = N + Incr(I)
Next I
w = Base ^ N
' N is visible outside the block but I is not.
For ステートメントは I を For ブロックの一部として宣言するため、I はブロック スコープだけを持ちます。
ただし、変数の有効期間は、プロシージャ全体の有効期間のままになります。変数がブロック スコープまたはプロシージャ スコープのどちらの場合でも同様です。ブロック内で変数を宣言し、プロシージャの有効期間中に何度もブロックに入る場合は、変数を初期化して、変数の値が予測不可能になることを避けます。