次の方法で共有


時間のかかる操作でユーザーによる中断を許可する

適用対象: Excel 2013 | Office 2013 | Visual Studio

Windows ではプリエンプティブ マルチタスキングを使用しますが、実行に時間のかかる関数やコマンドについては、オペレーティング システムのために時間を確保し、同時実行タスクをもう一度計画できるようにすることをお勧めします。 ネイティブ Windows 呼び出しを使用している場合は、Sleep 関数を使って実行できます。 C API を使用している場合は、xlAbort 関数 を使って実行できます。これは、一時的なプロセッサを生成するだけではなく、ユーザーがキャンセル キー Esc を押したかどうかも確認します。

したがって、xlAbort 関数を使用すると、ユーザーがプロセスを終了し、必要なクリーンアップを行い、Excel に制御を返すかどうかをコードでチェックできます。 この関数を使用すると、中断条件をクリアすることもできます。 これにより、コマンドでダイアログ ボックスを表示して、ユーザーがコマンドを終了するかどうかを確認できます。 ユーザーがコマンドを終了したくない場合は、引数 FALSE を指定して xlAbort 関数を呼び出すと、中断がクリアされます。 (既定の引数は TRUE です。これは単に条件をチェックしますが、クリアしません)。

ユーザー定義関数 (UDF) や XLL コマンドから xlAbort 関数を呼び出すことができます。 UDF では、ユーザーによる中断が検出されて、xlAbort 関数が TRUE を返す場合、通常、関数の計算が中断され、計算が完了しなかったことを示す特定の値 (エラーや 0) が返されます。 時間のかかる関数の他のインスタンス (同じようにこの状態を確認する) も中断されるように、この中断状態を解除しないでください。 Excel は、再計算の終了時にこの状態を暗黙的に解除します。

Excel はコマンドの終了時にこの状態を暗黙的に解除しますが、コマンドで中断状態が検出された場合、通常は引数 FALSE を指定して xlAbort 関数を呼び出して状態を解除します。

関連項目

DLL または XLL からのみ呼び出し可能な C API 関数
Excel でのマルチスレッド再計算
Excel XLL の開発
Excel インスタンスとメイン ウィンドウ ハンドルへのアクセス