- - PR -
ユーザ操作でExcelアプリケーションが終了してしまう
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-02-15 11:22
VB.NETでExcel2003にファイルからデータを出力するプログラムを作成しています。
Excelが非表示状態(Application.Visible = False)でデータ出力処理中に、 ユーザによって 1.Excelファイルを開いてExcelを起動 2.すぐにExcelを終了する 操作を行うと、データ出力プログラムの方で 以下のエラーメッセージが表示されてしまいます。 ---------------- メッセージ内容:起動されたオブジェクトはクライアントから切断されました。(HRESULTからの例外: 0x80010108(RPC_E_DISCONNECTED)) ---------------- ユーザがファイルを開いたときにデータ出力プログラムが使用しているプロセスの Excelと同じExcelを使用してしまうのが問題だと思うのですが、 ユーザからファイルを開いてもデータ出力プログラムと同じプロセスのExcelを 使用しないようにする方法はありませんでしょうか? ご教授のほど宜しくお願い致します。 [ メッセージ編集済み 編集者: BlueField 編集日時 2007-02-15 11:24 ] | ||||||||||||||||
|
投稿日時: 2007-02-15 12:15
エクスプローラからの後出しとなると、普通の方法では難しいですね。 終了イベントを捉えてキャンセルしてしまえば良いと思います。 もちろん、閉じようとしている Workbook は閉じさせます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-02-15 13:05
やはり難しい、ですか^^; しかし、イベントを捉えれば不可能ではないということですね。 (結構遭遇しそうなケースだと思うのにマイクロソフトめ・・・) とても参考になりました。 じゃんぬねっとさん、素早いご回答ありがとうございます! | ||||||||||||||||
|
投稿日時: 2007-02-15 13:52
今確認したところ、可能のようです。 BeforeClose イベントで Cancel することができます。
(遭遇しそうなケースかどうかは主観になるので言及しませんが) 今回は回避策がコードで普通に組めるレベルなので、まだ良い方です。 一部の HRESULT の例外などは回避すらできないのでもっと深刻でしょう。 このあたりは想定も何も当初からしていなかったのでしょうね。 Office の歴史も長いわけで、なかなか変えられない現状があります。 次期 Office + VSTO には期待していますが、それまでは VBA ベースで触る程度が良いでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2007-02-15 14:23
すみません、わざわざ確認までして頂いて^^;
軽いグチだと思って聞き流しておいてください^^; 何にせよ余計な発言でした。 今後は心に思うだけにしておくようにします^^
VBAベースにできれば・・・・良かったのですが、 他システムとの同期など色々制限がありまして。 まぁ、一番の問題は己の知識不足ですが。。(精進します^^;) じゃんぬねっとさん、ご回答ありがとうございます! | ||||||||||||||||
|
投稿日時: 2007-02-15 15:54
ユーザが、どのようにエクセル ファイルを開くのでしょうか?エクスプローラから、ファイルをダブルクリックする、などであるなら、各クライアントで設定を変更してもらう必要があります。 エクスプローラから、エクセル ファイルをダブルクリックします。同じファイルを、もう一度ダブルクリックします。すると、同じ名前のファイルは開けません、というメッセージが表示されます。 スタートメニューからエクセルを起動し、そのエクセルのファイル メニューから、同じファイルを開きます。すると、編集中なので読み取り専用で開きますか、というメッセージが表示されます。 なぜこの様な違いが発生するのでしょう? エクスプローラが、すでに起動しているエクセル プロセスに対してメッセージを送るからです。従って、新たにプロセスを起動したいなら、エクスプローラに対して指示を出さなければ(設定を変更しなければ)なりません。 具体的には、[フォルダ オプション]の[ファイルの種類]タブから xls を選び、[詳細設定]、「開く」を選んで[編集]、[DDE を使う]チェックを外せば、別のプロセスを使うようになります。 _________________ | ||||||||||||||||
|
投稿日時: 2007-02-15 16:43
「エクスプローラからエクセルファイルを開く」という認識でOKです^^
既定値がDDEを使用になっているためプログラムで生成した Excelが使用されてしまうということですか〜。 そうなるとプログラムだけでどうこうできる問題ではなさそうですね^^; とても参考になりました、Jittaさんありがとうございます! | ||||||||||||||||
|
投稿日時: 2007-02-15 17:26
一応、起動中の Excel.ApplicationClass から、代替起動することで誤魔化しは可能です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3|4
次のページへ»