Execute ステートメント
指定された 1 つ以上のステートメントを実行します。
Execute statement
引数 statement は、必ず指定します。statement には、実行するためのステートメントが 1 つ以上含まれた文字列式を指定します。statement に複数のステートメントを指定する場合は、コロンまたは埋め込み改行で区切ります。
解説
VBScript では、x = y の解釈が 2 とおりあります。1 つ目は代入ステートメントとして解釈され、y の値が x に代入されます。2 つ目は x と y の値が等しいかどうかをテストする式として解釈されます。等しい場合、result は True です。それ以外の場合、result は False です。Execute ステートメントは常に 1 つ目の解釈を適用し、Eval メソッドは常に 2 つ目の解釈を適用します。
**メモ **Microsoft® JScript™ では、代入と比較を混同することはありません。代入演算子 (=) は比較演算子 (==)と異なるからです。
Execute ステートメントが呼び出されるときのコンテキストによって、実行中のコードで使用できるオブジェクトと変数が決まります。Execute ステートメントで実行されるコードの中では、スコープ内のオブジェクトと変数を使用できます。ただし、プロシージャを作成するコードを実行する場合、作成されたプロシージャは、作成元のプロシージャのスコープを継承しないことに注意してください。
新しいプロシージャのスコープは、他のプロシージャと同様にグローバルであり、グローバル スコープに含まれるすべてを継承します。一方コンテキストは、他のプロシージャとは異なりグローバルでないので、Execute ステートメントを実行したプロシージャのコンテキストでしか実行できません。ただし、プロシージャの外部 (グローバル スコープの内部) で呼び出された場合、Execute ステートメントはグローバル スコープに含まれるすべてを継承し、コンテキストがグローバルなので、どこからでも呼び出せます。次のコードは、この機能の使用例です。
Dim X ' グローバル スコープで X を宣言します。
X = "Global" ' グローバルな X に値を代入します。
Sub Proc1 ' プロシージャを宣言します。
Dim X ' ローカル スコープで X を宣言します。
X = "Local" ' ローカルな X に値を代入します。
' 呼び出されると X を出力するプロシージャを、
' Execute ステートメントで作成します。
' グローバル スコープに含まれるすべてを Proc2 が
' 継承するため、グローバルな X が出力されます。
Execute "Sub Proc2: Print X: End Sub"
Print Eval("X") ' ローカルな X を出力します。
Proc2 ' Proc1 のスコープで Proc2 を呼び出します。
End Sub
Proc2 ' Proc1 の外部で Proc2 を使用できないため、
' この行でエラーが発生します。
Proc1 ' Proc1 を呼び出します。
Execute "Sub Proc2: Print X: End Sub"
Proc2 ' Proc2 をグローバルに使用できるように
' なったので、この呼び出しは成功します。
次のコードは、プロシージャ全体をダブル クォーテーションで囲まなくて済むように Execute ステートメントを書き換えた例です。
S = "Sub Proc2" & vbCrLf
S = S & " Print X" & vbCrLf
S = S & "End Sub"
Execute S