変数の適用範囲は、変数を宣言する際に指定します。
変数の適用範囲にはプロシージャ、プライベート(モジュール)および、パブリックの3種類があります。
下記のようにプロシージャ内レベルの変数は、プロシージャの範囲内でのみ変数が有効となります。
Sub Sample1()
Dim i As Integer
i = 1
Msgbox i
End Sub
下記のようにプライベート(モジュール内)レベルの変数は、モジュールの範囲内で変数が有効と成る。
プライベートレベルの変数は、Privateステートメントで宣言する必要がある。
Praivateステートメントを記述しない場合も、自動的にPrivate変数になります。
'Module1
Private i As Integer
Dim j As Integer 'Privateを省略した場合
Sub Sample()
Call Sample1
Call Sample2
Msgbox i '---iは3となる
End Sub
Sub Sample1()
i = 1
End Sub
Sub Sample2()
i = i + 2
End Sub
下記のようにパブリックレベルの変数は、変数有効範囲が最も広く、他のモジュールでもパブリック変数を共有して使うことができます。
'---Module1
Public i As Integer 'パブリックモジュールレベルの変数宣言
Sub Sample()
i = 3
Call Sample1
Call Sample2
Msgbox i '---iは5となる
End Sub
Sub Sample2()
i = i + 1
End Sub
'---Module2
Public Sub Sample3()
i = i + 1
End Sub