ExcelDna を使用して C# で単純な UDF を作成していたときに問題が発生しました
関数はこれを使用します:
var reference = XlCall.Excel(XlCall.xlfCaller);
string oldValue = ((ExcelReference)reference).GetValue().ToString();
関数をクラス 2 (数式に追加)としてマークする を指定しない限り、循環参照エラー ( GetValue
UDF を再度呼び出してセルを再評価しようとする) が発生します。IsMacroType=true
#
循環エラーにどのようにつながるかわかりません。ExcelReference.GetValue()
しかし、セルを評価することもあれば、評価しないこともあると思いますか?
クラス 2 のみに影響するようですxlfCaller
が、
その後、 のソース コードを確認したExcelReference
ところ、実際に呼び出されているのは xlCoerce であることがわかりました。
また、セルで F2 を押すとGetValue()
、セルが何であっても 0 を返すことに気付きました。Ctrl+Alt+F9 を押すと、強制的にすべて再計算GetValue()
され、以前に計算された値が返されます。
誰かがこれについてもう少し詳しく説明してもらえますか? xlCoerce はとにかくセル値/数式に対してどのように機能し、クラス 2 はそれにどのように影響しますか?