0

Excel c/c++ sdk >= 2007 (参照用に 2007 のリンクを掲載) および Excel >= 2007を使用しています。関数 F を優れたものにするために提供するxll を (sdk を使用して) コーディングしましが、この関数 F はExcelシートで2つの方法で呼び出すことができます:1)Excelセル/セル範囲または数式バーにFを含む数式を直接書き込みます2) Excelセルに書き込み=F、数式の左側にあるfxアイコンをクリックしますbar と Excel の関数ウィザードを使用します

私が興味を持っているのは2番目のケースだけです。この場合、これは Excel の関数ウィザードのダイアログ ボックスを開きます: n 個のセルを含むウィンドウで、それぞれが F の 1 つの引数に対応します (F が n 個の引数をとる関数であると仮定します)。デフォルトでは、セルの 1 つに何かを入力すると、Excel は関数の再計算をトリガーします。

これは、関数を知らず、「それを発見」したい場合に特に便利です。入力したものが F などの正しい引数を表しているかどうかを確認できるためです。たとえば、エラーが表示されるなどです。

しかし、F が (C++ で) 非常に集約的な数値ルーチンに依存している場合、すべての再計算に時間がかかりすぎて、ウィザードがフリーズします。(ダイアログ ボックス内のセルが変更されるたびに、再計算がトリガーされるため)。

したがって、私は次のことをしたいと思います:関数ウィザードを介して関数が「呼び出された」ときに、何らかの方法で再計算を無効にします。これは、低品質のソリューションとしましょう。

理想的には、私は次のことをしたいと思います: トリガーされる再計算を自動化しますが、ウィザードが呼び出されるスレッドとは別の「スレッド」で (C++ Excel SDK コードで) 実行されるようにします。これ以上凍結しないように。(ウィザードの便利な部分を保存できるようにするためです。)どうやら、このmsdnの記事を正しく理解していれば(同じ問題ではない場合はそうではないかもしれません)、Excel 2007では不可能ですが、Excelでは可能です> = 2010年。

F のユーザーはさまざまなバージョンの Excel を使用しているため (主に 2007 年ですが、中には 2003 年のものもあります)、たとえ私が 2010 年に移行したいと思ったとしても (さあ、実生活ではすでに 2013 年になっています! )、前述の理由により、私はそれをしませんが、一部のExcelバージョンでのみ機能するものがあるのは満足できないためです...

そこで、別の解決策を見つけたいと思います。これについて RTD について話している人がいると聞きましたが、よくわかりません。

そのため、洞察は大歓迎です。かなり前にthx。(そして質問が長くなってすみません。)

4

2 に答える 2

0

回避策は、ルーティングの開始時にパラメーターが欠落しているかnilかどうかを確認し、すべてのパラメーターが設定されているかどうかのみを計算することです。ユーザーがダイアログを開いていくつかの値を変更するたびに再計算を防ぐことはできませんが、少なくともユーザーがすべてのパラメーターを設定するまで再計算を防ぐことはできます。

追加のパラメーター (トリガーなど) を追加し、計算前にパラメーターが特定の値 (1 など) に設定されているかどうかを確認することができます。

于 2016-07-04T21:27:33.697 に答える
0

使用する方法について説明しているこのMSDN 記事を C++ の例で参照してください。
これは、XLDNA や XLL Plus などのフレームワークで使用される方法です (Addin Express でも使用すると思います)。

関数ウィザードは実際の再計算ではなく、内部で Evaluate メソッドを使用するため、非同期 UDF 署名を使用しても効果があるとは思いません (ただし、実際に試したことはありません)。

于 2014-11-10T08:30:53.757 に答える