5

ここに素晴らしいクレイジーな発見があります:

Option Explicit

ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=41"
ExecuteGlobal "Option Explicit: TestVar=42"

MsgBox "TestVar=" & CStr (TestVar)

期待どおりに動作します -- 42 が表示されます。

と:

Option Explicit

ExecuteGlobal "Option Explicit: TestVar: TestVar=41"

MsgBox "TestVar=" & CStr (TestVar)

TestVar が定義されていないため、ExecuteGlobal 呼び出しで「未定義の変数」が生成されます。わかった。

私が理解していないのは、次のことです。

Option Explicit

ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=41"
ExecuteGlobal "Option Explicit: Dim TestVar: TestVar=42"

MsgBox "TestVar=" & CStr (TestVar)

は 2 番目の呼び出しで "Identifier redefined" をスローしませが、2 番目の呼び出しに が存在しなかったExecuteGlobalかのように 42 を表示します。DimExecuteGlobal

宣言で同じことを行うとClass、すべてが正常に機能します。つまり、どのような状況でもクラスを再定義することはできません。

なんてこったい?

私の質問は次のとおりです。a) ExecuteGlobal は宣言されていない変数へのアクセスを禁止し、b) クラス定義は異なる方法で処理されるのに、グローバル変数を再定義できるのはなぜですか?ExecuteGlobal

私はこれにつながるユースケースを持っています (テスト実行時にソースコードを生成し、予期しないほど奇妙な理由で ExecuteGlobal を介して実行します) が、今作成したポイントは、私が思う現実世界のシナリオの説明。

スクリプトの再生に VisualBasic スクリプト ホスト エンジンを使用する QTP (HP QuickTest Professional) を使用してこれに遭遇しましたが、VB スクリプト ホストのみでまったく同じ状況です。

4

1 に答える 1