岡三RSSのExcelをC#から操作する際の 0x80010001 (RPC_E_CALL_REJECTED) のエラー対策 の続き
ちなみに Excel を呼ぶときに、マクロの実行を一時的に止めてから呼べば良いかとも考えたが、そういうマクロのオンオフはできなさそうだ。
ほかには、Excel を呼ぶときには岡三デスクトップ(DesktopSidebar)からログアウトしておけば、Excel 内部の処理も止まるので、そうしておいてから Excel を呼ぶという手もあり、実際、これでうまく動くのだが、これだとその後、ログインするときにパスワードを入力しないといけないので面倒くさい。
最終的な案は、Excel の内部が忙しい時には、こっち(C#の側)からは呼ばない。代わりに,Excel が暇な時にこっちを呼んでくれ、というふうに依頼するようにすればよい。具体的には、つぎのように処理する。
- 依頼したい時は、自分で作った標準モジュール内の Sub/Function を呼びだす。
- その Sub/Function の中で、特定のシートのセルを書きかえる。
- そうすると Worksheet の Change イベントが起きる。
- C# 側でそのイベントを捕捉し、そのイベントハンドラー内でシートの追加をしたりその追加したシートで岡三RSSの関数式をセルへ書き込む。
これで試したら 0x80010001 (RPC_E_CALL_REJECTED) はでなくなった。