@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

excelとの連動がうまくいかない、、

投稿者投稿内容
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2005-09-28 17:54
いつもお世話になっております

VB.NETからエクセルファイルを開くプログラムを作りましたが、
どうも分からない現象が起こります。

<環境>
Windows XP SP1
VB.NET 2003
office:2000,xp,2003

<困っていること>
「c:\temp\test.xlsをopenしますか?」に対して、
「ok」するとファイルが開かれます。
この状態で、c:\temp\の test.xlsをダブルクリックでopenしようとすると、
すでにopenされているtest.xlsがクローズされてしまいます。
タスクマネージャーのプロセスは残っています。
officeのバグのようですが、
ご存知の方、教えていただけると嬉しいです。

<コード>

Dim excelApp As New Excel.Application
Dim xlBooks As Excel.Workbooks

Try

excelApp.Workbooks.Open("c:\temp\test.xls")
xlBooks = excelApp.Workbooks
If MessageBox.Show("c:\temp\test.xls" & "を openしますか?", "確認", MessageBoxButtons.YesNo) = DialogResult.Yes Then
excelApp.Visible = True
xlBooks = Nothing
Else
xlBooks = Nothing
excelApp.Quit()
End If
excelApp = Nothing

Catch ex As Exception
msgbox(ex.message)
Finally
If Not (xlBooks Is Nothing) Then xlBooks = Nothing
If Not (excelApp Is Nothing) Then
excelApp.DisplayAlerts = False
excelApp.Quit()
excelApp = Nothing
End If
GC.Collect()
End Try

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-28 18:04
こんにちは、じゃんぬ です。

引用:

スンちゃんパパさんの書き込み (2005-09-28 17:54) より:

タスクマネージャーのプロセスは残っています。
officeのバグのようですが、ご存知の方、教えていただけると嬉しいです。


バグと決め付けたその理由をお聞かせ願えませんか?

ちなみにコードですが、解放の仕方が間違ってます。
正しくはこうです。

  COM オブジェクトを解放する

# try 〜 finally の嵐。
# CodingHorror ですね。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2005-09-28 18:54
ご返事有難うございます。

>>バグと決め付けたその理由をお聞かせ願えませんか?
すみません。勝手に思っただけです。
さっきは少し説明が足りなかったですが、
普通は、
@ファイルをダブルクリックする場合:ダブルクリックした瞬間、
  すでに開かれているファイルが再表示される
AファイルをDragdropでする場合:「読み込み専用」、「通知」、「キャンセル」のオ  プションDialogboxがでる。
の仕様ですよね。

これと同じ動きでないとおかしいと思ったからです。

>>ちなみにコードですが、解放の仕方が間違ってます。
>>正しくはこうです。
アドバイス有難うございます。

スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2005-09-29 14:40
じゃんぬ様

少し内容追加です。
上記の内容でAの場合は、
普通の動きと同じです。
@のみは、closeされてしまう動きですね。

コメントいただけたら幸いです。
宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-29 14:56
こんにちは、じゃんぬ です。

引用:

スンちゃんパパさんの書き込み (2005-09-29 14:40) より:

@のみは、closeされてしまう動きですね。
コメントいただけたら幸いです。
宜しくお願い致します。


ファイルがロックされていれば、Close なんてされないと思ったのですが、
今、常駐先に来てますので環境がなかったりします...
申し訳ありません。(*_ _)

# どなたか試して頂けません?
# 漁ってみたのですが、それらしいレポートもなかったです。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-09-29 15:10
NAL-6295です。

1.エクセルでファイルを開く(プログラムで操作するのではなく)
2.もう一回同じファイルを開く

とすると、確かに、1で開いたファイルを閉じてから、開くという処理が行われます。

#今回の件とは関係ありませんが、確かエクセルって、パスが違ってもファイル名が同じだと同時に開けないですよね。
スンパ
ベテラン
会議室デビュー日: 2005/05/23
投稿数: 85
投稿日時: 2005-09-29 17:05
スンちゃんパパです。

引用:
-------------------------------------------------------------------------------
じゃんぬねっとさんの書き込み (2005-09-29 14:56) より:
ファイルがロックされていれば、Close なんてされないと思ったのですが、
-------------------------------------------------------------------------------

プログラムのほうから明示的に、
ファイルにロックかけてテストやってみたいですが、、
どうするのか、よく分かりません。
どなたかご存知なら、教えてください。


引用:
-------------------------------------------------------------------------------
NAL-6295さんの書き込み (2005-09-29 15:10) より:
#今回の件とは関係ありませんが、確かエクセルって、パスが違ってもファイル名が同じだと同時に開けないですよね。
-------------------------------------------------------------------------------

そうですね。警告のDialogboxがでます。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-29 17:10
これって、閉じるっていうよりは落ちてるんじゃないです?


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

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