Monday, December 23, 2013

VBA 変数の有効範囲と有効期間

①プロシージャレベル

Sub .... End Subまでの範囲。

プロシージャレベル変数の宣言には、Subプロシージャ内でDimまたはStaticを使用する。
DimとStaticの違いは有効期間である。

Subプロシージャ内でDim宣言した場合は、Subプロシージャの実行が終了すると値が失われる。

Static宣言した場合は、Subプロシージャの終了後も保持される。
ただし、参照範囲がSubプロシージャ内に限られているので、他のSubプロシージャから参照することはできない。
Staticは、同じプロシージャを繰り返し呼び出す必要がある場合に、Subプロシージャ内の値を保持したまま呼び出したい時に使う。



②モジュールレベル

モジュール内での宣言、使用。(ユーザフォーム、標準モジュール、クラスモジュール)

モジュールレベル変数の宣言には、Privateステートメントを使用するか、またはモジュール内(Subプロシージャの外)でDimを使用する。
いずれも参照範囲および有効期間は同じ。

各モジュール内では、どのプロシージャからでも参照可能。
モジュール変数は、Subプロシージャが終了しても変数が再定義するまで値が保持される。例えば、ユーザフォームを表示している間は値が保持される。



③プロジェクトレベル

プロジェクトの全体。

変数の宣言には、Publicステートメントを使用する。標準モジュール内で宣言する。
有効期間は、モジュールレベル変数と同じ。

ユーザフォーム内で宣言したプロジェクトレベル変数は、標準モジュール内では参照できない。



Source: Excel VBA コーディング・テクニック 間 顕次 p.167

No comments:

Post a Comment