【機能】
スクリプトのグローバル名前空間で指定された 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
コメント
コメントを投稿