Yield は、ユーザーが 1 つ以上の計算を実行できるように制御します。計算が終わると、スクリプトを再開します。
DoCalc サブルーチンは、Shell ステートメントを使用して Windows の電卓を起動します。Shell ステートメントは電卓のタスク ID (モジュールハンドルとも呼ばれます) を返します。While ループ内で、サブルーチンは Windows 3.1 の API 関数 GetModuleUsage を呼び出し、この関数はモジュールの参照回数 (現在実行されている電卓のインスタンスの数) を返します。Yield ステートメントは制御を電卓に移します。ユーザーが電卓を閉じると、GetModuleUsage はゼロの参照カウントを返します。While ループが終了し、サブルーチンは適切なメッセージを表示します。
While ループを削除すると (試してみてください)、電卓を実行し始めた直後にメッセージボックスが表示されます。つまり、スクリプトは電卓に制御を移さずに実行を継続します。
' Declare the Windows 3.1 API function at the module level.
Declare Function GetModuleUsage Lib "Kernel" _
(ByVal taskID As Integer) As Integer
Sub DoCalc
Dim taskID As Integer
' Start the Windows calculator, returning its task ID.
taskID% = Shell("calc.exe", 1)
' As long as the module is still running, yield.
Do While GetModuleUsage(taskID%) > 0
Yield
Loop
' When the user closes the calculator, continue.
MessageBox "Calculations done"
End Sub
DoCalc ' Call the DoCalc sub.