ExecuteGlobal ステートメント

スクリプトのグローバル名前空間で指定された 1 つ以上のステートメントを実行します。

ExecuteGlobal statement 

statement には、実行するためのステートメントが 1 つ以上含まれた文字列式を指定します。statement に複数のステートメントを指定する場合は、コロンまたは埋め込み改行で区切ります。

解説

VBScript では、x = y の解釈が 2 とおりあります。1 つ目は代入ステートメントとして解釈され、y の値が x に代入されます。2 つ目は xy の値が等しいかどうかをテストする式として解釈されます。等しい場合、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

必要条件

バージョン 5