次の方法で共有


変数のスコープ (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 はブロック スコープだけを持ちます。

ただし、変数の有効期間は、プロシージャ全体の有効期間のままになります。変数がブロック スコープまたはプロシージャ スコープのどちらの場合でも同様です。ブロック内で変数を宣言し、プロシージャの有効期間中に何度もブロックに入る場合は、変数を初期化して、変数の値が予測不可能になることを避けます。

参照

概念

プログラミング要素のサポートに関する変更の概要