岡三RSSのExcelをC#から操作する際の 0x80010001 (RPC_E_CALL_REJECTED) のエラー対策 の続き

ちなみに Excel を呼ぶときに、マクロの実行を一時的に止めてから呼べば良いかとも考えたが、そういうマクロのオンオフはできなさそうだ。
ほかには、Excel を呼ぶときには岡三デスクトップ(DesktopSidebar)からログアウトしておけば、Excel 内部の処理も止まるので、そうしておいてから Excel を呼ぶという手もあり、実際、これでうまく動くのだが、これだとその後、ログインするときにパスワードを入力しないといけないので面倒くさい。
最終的な案は、Excel の内部が忙しい時には、こっち(C#の側)からは呼ばない。代わりに,Excel が暇な時にこっちを呼んでくれ、というふうに依頼するようにすればよい。具体的には、つぎのように処理する。

  1. 依頼したい時は、自分で作った標準モジュール内の Sub/Function を呼びだす。
  2. その Sub/Function の中で、特定のシートのセルを書きかえる。
  3. そうすると Worksheet の Change イベントが起きる。
  4. C# 側でそのイベントを捕捉し、そのイベントハンドラー内でシートの追加をしたりその追加したシートで岡三RSSの関数式をセルへ書き込む。

これで試したら 0x80010001 (RPC_E_CALL_REJECTED) はでなくなった。