- - PR -
シートのコピーでExcelのプロセスが残る
1
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-20 15:54
ExcelのシートのコピーをVB.NETから行うとExcelのプロセスが残ってしまいます。
参照の開放はやっているつもりなのですが、なにか抜けがあるのでしょうか? 以下がコードになります ※量を減らすためエラー処理などは省いてあります Dim excel As Object = CreateObject("excel.application") Dim workbooks As Object = excel.Workbooks Dim book As Object = workbooks.add Dim sheets As Object = book.sheets Dim sourceSheet As Object = sheets.item(1) 'ここをコメントにするとプロセスは残らない sourceSheet.copy(, sourceSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(sourceSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(sheets) book.saved = True book.close() System.Runtime.InteropServices.Marshal.ReleaseComObject(book) System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks) excel.quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(excel) 環境は Windows2000Pro SP4 Microsoft Visual Basic .NET 69516-270-0000007-18937 Excel2000 SP3 | ||||||||||||||||||||
|
投稿日時: 2006-07-20 16:59
じゃんぬさーん、出番ですよーw
以下が参考になりませんか? sheetのコピー | ||||||||||||||||||||
|
投稿日時: 2006-07-20 17:11
皆さまにお任せします。(;^-^) いいかげん、私自身がくどくてしょうがないんですよ。(おそらく、ひどりさんも) それはともかく、特別理由がない限りは 「遅延バインディング」 はやめましょう。> うっどさん _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-07-20 17:20
こんにちは。
「遅延バインディング」をやめたいのは山々なのですが、 ユーザの環境が2000,Xp混在なのでやむなく・・・ ※Excel2000の参照設定をしていた別システムがOfficeXP環境で 動かない事例がありました。 | ||||||||||||||||||||
|
投稿日時: 2006-07-20 17:42
うーん... まあ、とりあえず、本題の方だけお答えします。
この部分を、
このように変更するだけで、解決するのですが、それはおいといて。
この部分を、
このように変更して実行してみてください。 さて、参照カウントの残りは...? # ごめんなさい、検証していません。(予想がはずれたら恥ずかしいw) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-07-27 09:39
返答が遅れてごめんなさい。
参照カウントの残りは1でした。 sourceSheetの開放を二度行うことでプロセスは残らないようになりました・・・ が、納得できません。 sourceSheet.copy(, sourceSheet) で参照カウントが何故2になるのか。 理由を知っておかないと以後同じような間違いを起こす可能性があるので、 できれば何故こうなるのか解説をお願いしたいのですが・・・・ | ||||||||||||||||||||
|
投稿日時: 2006-07-27 10:14
2 つを並べて、"相違している点" に着目してみてはいかがでしょうか?
型を明示化しない場合は、参照カウントが 2 になっているということになります。 型を明示化しない場合、"どんな処理が余分に入るのか" を考えれば、 "どこで"、参照カウントが増えているのか、自ずと見えてくるでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1