2016-08-17 22 views

答えて

1

あなたはおそらく、これをUDFの内部から呼び出すことになります。通常のUDFはシートの他の部分を読み取ることができません - 必要な情報をパラメーターとして関数に渡すことが考えられます。

Excel-DNA関数を 'マクロシート関数'としてマークすると、これを実行できます。 (ExcelFunction属性にIsMacroType = trueを設定します)。これには、計算シーケンスに他の副作用がありました。たとえば、計算が開始される前にそのセルから値を取得している可能性があります。

Excelの機能スタイルを守り、余分な依存関係をUDFに渡すことをお勧めします。


もう1つの可能性は、バックグラウンドワーカースレッドから呼び出すことです。 ExcelReferenceタイプで使用しているExcel C APIは、メインのExcelスレッドからのみ呼び出すことができます(スレッドセーフなUDFの例外がいくつかあります)。したがって、メインスレッドで実行するバックグラウンドコードを取得する必要があります。

Excelは基本的にシングルスレッドなので、COMオブジェクトモデルを使用しているときにも当てはまります。すべての呼び出しは、実際に実行される前にCOMによってメインのExcelスレッドにマーシャリングされます。

Excel-DNAアドインでは、ExcelAsyncUtil.QueueAsMacro(...)ヘルパーを使用してマクロとしてメインスレッド上で実行するコードをスケジュールできます。あなたが渡したデリゲートはできるだけ早く実行され、あなたが尋ねるようなC APIコールを安全に行うことができます。

関連する問題