2017-02-02 12 views
1

非同期関数をセルに書き込んだ後に「Enter」を押すと、非同期関数が正しく呼び出され、計算が終了するとExcelによってイベントxleventCalculationEndedが発生します。非同期UDFとxleventCalculationCanceled

しかし、「Enter」をクリックした直後に別のセルを押すと、xleventCalculationCanceledというイベントが発生し、別の時間が呼び出されます。この動作は正常ですか?私は最初の非同期呼び出し、2番目の非同期呼び出し、またはその両方のためにExcel12(xlAsyncReturn,...)を介して結果を返すべきですか?

つまり、xleventCalculationCanceledイベントには、と表示されていますか?は結果をExcelに返すよう強制されていませんか? (適切なasyncHandleを使用)

私は別のスレッドで集中的な計算を委任し、計算中にブロックしないように非同期関数を使用しています。しかし、async関数が自動的に2回呼び出された場合(最初の呼び出しが終了するのを待たずに別のセルをクリックした場合など)、同じ入力に対して2回計算されます(最初の呼び出し-cancelledあなたはこの問題にどのように対処していますか?

同じ機能を2つ呼び出すと、同じ入力で、バグですか?

多くのお礼ありがとうございます。

答えて

1

あなたのご意見は、通常の動作です。 Excelは、ユーザーの操作があった場合に非同期計算をキャンセルしてから再開します(複数回実行することもできます)。

  1. xleventCalculationEndedxleventCalculationCanceled後に直接起動します、と

  2. あなたが計算xleventCalculationEnded火災時に割り当てられたリソースを解放することができます。

    documentation

    があることを示唆しています。あなたが持っているかもしれないasyncHandleを含めることを理解しています。したがって、ハンドルに基づいて結果を返す必要はありません。

飛行中に長時間動作する機能をキャンセルできる場合は、作業をキャンセルすることができます。さもなければ、あなたは機能呼出しが飛行中であることについて何らかの内部簿記を行い、そのように自分自身で2回作業をすることを妨げるかもしれません。

関連する問題