- PR -

ユーザ操作でExcelアプリケーションが終了してしまう

投稿者投稿内容
BlueField
会議室デビュー日: 2007/02/15
投稿数: 12
お住まい・勤務地: 茨城
投稿日時: 2007-02-15 17:56
引用:

じゃんぬねっとさんの書き込み (2007-02-15 17:26) より:
一応、起動中の Excel.ApplicationClass から、代替起動することで誤魔化しは可能です。




すみません、代替起動というのはどのように行うのでしょうか?
Application.AltStartupPathプロパティに
"c:"
のような仮のパスを設定するということでしょうか?
(知識不足ですみません)
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-15 19:29
引用:

BlueFieldさんの書き込み (2007-02-15 17:56) より:

すみません、代替起動というのはどのように行うのでしょうか?
Application.AltStartupPathプロパティに
"c:"
のような仮のパスを設定するということでしょうか?
(知識不足ですみません)


それでうまくいきますか? (うまくいかないと思います)

私が思いついたのは、以下のとおりです。

Excel アプリケーション起動中に別の Excel Workbook を開きますと、Excel.Workbooks に Workbook が追加されます。
このタイミングで ApplicationClass.WorkbookOpen イベントが発生します。

WorkbookOpen イベントで、別インスタンス (プロセス) の Excel.ApplicationClass を起動し、
イベント引数にある Excel.Workbook を利用して起動させ COM の参照カウントをデクリメントして放置する。

このようにすれば、ユーザーは DDE を使っていたとしても、別インスタンスで起動させることができます。
まあ、最初の回答にあった BeforeClose イベントで解決した方が楽ですが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-15 20:06
引用:

スクリプトプログラマさんの書き込み (2007-02-15 19:48) より:

詳しくないのでよく分りませんが、Application.IgnoreRemoteRequests=True でよいのでは?


IgnoreRemoteRequests = True の場合、Workbook 自体が Open できなくなることがあります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
BlueField
会議室デビュー日: 2007/02/15
投稿数: 12
お住まい・勤務地: 茨城
投稿日時: 2007-02-15 21:19
引用:

じゃんぬねっとさんの書き込み (2007-02-15 19:29) より:
私が思いついたのは、以下のとおりです。

Excel アプリケーション起動中に別の Excel Workbook を開きますと、Excel.Workbooks に Workbook が追加されます。
このタイミングで ApplicationClass.WorkbookOpen イベントが発生します。

WorkbookOpen イベントで、別インスタンス (プロセス) の Excel.ApplicationClass を起動し、
イベント引数にある Excel.Workbook を利用して起動させ COM の参照カウントをデクリメントして放置する。

このようにすれば、ユーザーは DDE を使っていたとしても、別インスタンスで起動させることができます。
まあ、最初の回答にあった BeforeClose イベントで解決した方が楽ですが。



試してみたいのはヤマヤマなんですが、
Excel.ApplicationClass
が出てきてくれません・・・orz(Excel.Applicationは出てきますが)

現在参照しているのはCOMの
Microsoft Excel 11.0 Object Library(バージョン1.5.0.0)
です。


追記 ----------------------------------------
入力候補に出ないだけで使用できるみたいでした^^;
お騒がせして申し訳無いですm(_ _;)m


[ メッセージ編集済み 編集者: BlueField 編集日時 2007-02-15 21:28 ]
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2007-02-16 00:51
引用:

じゃんぬねっとさんの書き込み (2007-02-15 20:06) より:

IgnoreRemoteRequests = True の場合、Workbook 自体が Open できなくなることがあります。



かならず、後始末しておけばいいような気もしますけど。
最終手段としては、registry をいじれば。。。

HKCU\Software\Microsoft\Office\12.0\Excel\Options
REG_DWORD Options の bit flag 0x40 を切り替え。

Office 2007 で調べたので違うかもしんない。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2007-02-16 07:22
引用:

じゃんぬねっとさんの書き込み (2007-02-15 19:29) より:
まあ、最初の回答にあった BeforeClose イベントで解決した方が楽ですが。


これだと、ユーザーが何時終了していいのか、分からなくないですか?
または、プログラムで Exit していると思いますが、ユーザーが操作中に終了してしまわないですか?
_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-16 08:46
引用:

Jittaさんの書き込み (2007-02-16 07:22) より:

これだと、ユーザーが何時終了していいのか、分からなくないですか?


? 何やら勘違いしていないでしょうか?

当初より、特定の Workbook のみを処理が終わるまで終了させなければ良い。
というご質問だったかと思っていたのですが...

その Workbook の識別はプログラムからできます。
終了させて良い時期は、処理が終了した後です。

引用:

または、プログラムで Exit していると思いますが、ユーザーが操作中に終了してしまわないですか?


こちらに関しては、意味すらわからないです。

操作中に終了させないようにするためにやっていることなのに、
それ自体を否定されたら (それなりに説明して頂かないと) わけがわからないです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-02-16 08:49
引用:

ちゃっぴさんの書き込み (2007-02-16 00:51) より:

かならず、後始末しておけばいいような気もしますけど。
最終手段としては、registry をいじれば。。。


これが怖いのでイヤなのですよね。

たとえば、プロセスごと Kill された時のことを考えると、弊害のない手段を選びたいと思います。
"かならず、後始末" できる手段があれば良いとは思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌

スキルアップ/キャリアアップ(JOB@IT)