例: Yield 関数とステートメント

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.