- - PR -
Excelの「オプション」等が開かれているかチェックする方法
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-09 23:06
VB.NET2003からExcelを制御しています。
Excelの「ツール」→「オプション」やグラフウィザードを開いた状態で、 VB.NETからBook操作を実行したりBookのマクロを実行しようとすると、エラーが発生します。 そのため、VB.NETからBookの操作を実行する前にExcelの「オプション」「グラフウィザード」を開いているかチェックし、開いていたらBook操作を保留したいと考えています。 Excelの「オプション」画面や「グラフウィザード」画面が開かれているか、チェックするすべは無いでしょうか? (もしくは、Excelのメニューバーのどれがクリックされたかなど) | ||||||||
|
投稿日時: 2006-06-10 09:01
挙げたものに関わらず、ダイアログが表示されていると、HRESULT からの例外が発生します。 確実な回避方法はありません。 以下のように 5 回くらい試行してみるなど、基本は運用カバーになります。
こういう問題を孕むので、何かをするのであれば Excel を起動した直後にすべきです。 起動して、ユーザーに操作をさせた後で何かをする、という運用はあまりなさそうなのですが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-12 02:30
じゃんぬねっとさん、アドバイスありがとうございます。
返答が遅くなって申し訳ありませんm(__)m VB.NETのアプリケーションから定期的にVBA処理でSheetを自動更新し、VBA実行時以外はユーザーが自由に操作可能なソフトを組んでいるので、こういった問題が発生してます。^^; 起動時に開かれたら困るメニューを非表示にする等の方法は、最終手段として考えているのですが、まずはご提示いただいた例外catchからの認識で、どこまで対処できるか試してみようと思います。 | ||||||||
|
投稿日時: 2006-06-12 06:56
そうであれば、Book 側のマクロで実装した方が負荷は少ないですよ。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-06-14 09:10
>そうであれば、Book 側のマクロで実装した方が負荷は少ないですよ。
若干VB.NETが直接Excelを操作する部分もありますが、メインのVBA更新処理はBookのマクロに実装して、VB.NETからそのマクロを呼び出して処理するようにしています。 最終的には、「オプション」「印刷プレビュー」などを開いた状態でマクロを実行したら例外がでる処理を、メインのマクロを走らす前に実行して例外をCatchし、チェックするようにしました。 ただし、「グラフウィザード」を開いていた場合は、グラフの.SetSouceDataや軸設定等で例外がCatchできましたが、Excelの「グラフウィザード」画面を閉じた瞬間にExcelが例外を起こしてしまうので、グラフウィザードは起動時にボタンを押せなくしました。 じゃんぬねっとさん、ありがとうございました。 |
1