ExecuteGlobal ステートメント
スクリプトのグローバル名前空間で指定された 1 つ以上のステートメントを実行します。
ExecuteGlobal statement
statement には、実行するためのステートメントが 1 つ以上含まれた文字列式を指定します。statement に複数のステートメントを指定する場合は、コロンまたは埋め込み改行で区切ります。
解説
VBScript では、x = y の解釈が 2 とおりあります。1 つ目は代入ステートメントとして解釈され、y の値が x に代入されます。2 つ目は x と y の値が等しいかどうかをテストする式として解釈されます。等しい場合、result は True です。それ以外の場合、result は False です。ExecuteGlobal ステートメントは常に 1 つ目の解釈を適用し、Eval メソッドは常に 2 つ目の解釈を適用します。
メモ Microsoft® JScript™ では、代入と比較を混同することはありません。代入演算子 (=) は比較演算子 (==)と異なるからです。
ExecuteGlobal で指定されたすべてのステートメントは、スクリプトのグローバル名前空間で実行されます。この処理により、プログラムにコードを追加し、任意のプロシージャからアクセスできるようになります。たとえば、VBScript の Class ステートメントをランタイムで実行し、関数でクラスの新しいインスタンスを作成できます。
ランタイムでプロシージャおよびクラスを追加する方法は便利ですが、その際、既存のグローバル変数および関数が上書きされる可能性もあります。これによりプログラムに重大な問題が発生する場合があるため、ExecuteGlobal ステートメントは十分に理解してから使用してください。プロシージャにない変数または関数にアクセスする必要がない場合は、呼び出し関数の名前空間の処理のみを行う Execute ステートメントを使用してください。
次のコードは、ExecuteGlobal ステートメントの使用例です。
Dim X ' グローバル スコープで X を宣言します。
X = "Global" ' グローバルな X に値を代入します。
Sub Proc1 ' プロシージャを宣言します。
Dim X ' ローカル スコープで X を宣言します。
X = "Local" ' ローカルな X に値を代入します。
' 呼び出されると X を出力するプロシージャを、
' Execute ステートメントで作成します。
' グローバル スコープに含まれるすべてを Proc2 が
' 継承するため、グローバルな X が出力されます。
ExecuteGlobal "Sub Proc2: Print X: End Sub"
Print Eval("X") ' ローカルな X を出力します。
Proc2 ' グローバル スコープで Proc2 を呼び出すと、
' "Global" が印刷されます。
End Sub
Proc2 ' Proc1 の外部で Proc2 を使用できないため、
' この行でエラーが発生します。
Proc1 ' Proc1 を呼び出します。
Execute "Sub Proc2: Print X: End Sub"
Proc2 ' Proc2 をグローバルに使用できるように
' なったので、この呼び出しは成功します。
次のコードは、プロシージャ全体をダブル クォーテーションで囲まなくて済むように ExecuteGlobal ステートメントを書き換えた例です。
S = "Sub Proc2" & vbCrLf
S = S & " Print X" & vbCrLf
S = S & "End Sub"
ExecuteGlobal S