ここに素晴らしいクレイジーな発見があります:
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 を表示します。Dim
ExecuteGlobal
宣言で同じことを行うとClass
、すべてが正常に機能します。つまり、どのような状況でもクラスを再定義することはできません。
なんてこったい?
私の質問は次のとおりです。a) ExecuteGlobal は宣言されていない変数へのアクセスを禁止し、b) クラス定義は異なる方法で処理されるのに、グローバル変数を再定義できるのはなぜですか?ExecuteGlobal
私はこれにつながるユースケースを持っています (テスト実行時にソースコードを生成し、予期しないほど奇妙な理由で ExecuteGlobal を介して実行します) が、今作成したポイントは、私が思う現実世界のシナリオの説明。
スクリプトの再生に VisualBasic スクリプト ホスト エンジンを使用する QTP (HP QuickTest Professional) を使用してこれに遭遇しましたが、VB スクリプト ホストのみでまったく同じ状況です。