- ベストアンサー
VB.NETからEXCELの起動がうまくいかない
- VB.NETを使用してEXCELファイルを作成し、開く処理を行っていますが、特定のPCでメニューバーとステータスバーが表示されない状態です。
- 起動部分をコメントアウトして確認したところ、GC.COLLECTでEXCELが終了せずにアプリの終了時にEXCELが終了します。
- オブジェクトの開放がうまくいっていない可能性があります。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
参考になるページを追加でリンクしておきます。 http://igeta.cocolog-nifty.com/blog/2007/07/rcw.html
その他の回答 (4)
- MARU4812
- ベストアンサー率43% (196/452)
>FinalReleaseComObjectの場合、すべての参照カウントを0にしてくれると書いてあったのですが そこは、エクセルの内部処理(参照カウンタのカウントアップの仕様)に依存するので 実行した結果から推測するしかないかもしれません。少なくとも、こちらはエクセル の内部処理の開発者ではありませんので、正確な情報は回答できません。メーカー サポートを受けられたらいかがでしょう? 私の私見では、対象のオブジェクトが違うので効果は無いと思われます。 ヘルプにも http://msdn.microsoft.com/ja-jp/library/system.runtime.interopservices.marshal.finalreleasecomobject(v=VS.100).aspx >RCW への との記述があると思います。 引数で渡されている、解放する RCW を対象としての話です。 同じ"セル"オブジェクトだとおっしゃるかも知れませんが、フォームに TextBox1 と TextBox2 を置いたら同じオブジェクトとなるか?何か関連が 勝手に生まれるかと言えば、プログラムでそうしない限り何の関係も無い 別オブジェクトだと思います。
お礼
お世話になっております。 皆様にお教えいただきました通り、COMのリリースを追加したところ、開発環境では正しく、リリースされているようで、EXCELが落ちます。(タスクマネージャで確認) ところが問題のPCでは相変わらず、メニューバーとステータスバーしか表示されない状態です。 VisualStudio2008 WindowsXP Office2000 の構成です。(今更ですが・・・) よろしくお願いいたします。
補足
ご回答ありがとうございます。 TextBoxの例えがわかりやすかったです。 試してみます。 結果は時間がかかるかもしれませんが載せさせていただきます。
- MARU4812
- ベストアンサー率43% (196/452)
> System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) '退去手続きしたのは最新の1階5号室のみ ああ、抜き出すの間違っちゃった。ごめんなさい。 xlCells ではなく xlRange の解放です。
補足
ご回答ありがとうございます。 FinalReleaseComObjectの場合、すべての参照カウントを0にしてくれると書いてあったのですが、私の勘違いなのでしょうか?
- MARU4812
- ベストアンサー率43% (196/452)
> 3回目の同じ質問になってしまうのですがよろしくお願いいたします。 一応、なんとなくは覚えてるんだけど、たくさん回答しているので リンクしておいてくれるとありがたいです。 http://qanda.rakuten.ne.jp/qa6300171.html 賃貸契約を結ぶことを考えてください。 エクセルのオブジェクトをプログラムで使用するために契約する解釈です。 xlRange = xlCells(1, 10) '1階10号室で契約を入れます。 xlRange = xlCells(1, 5) '1階5号室で契約を入れます。 System.Runtime.InteropServices.Marshal.FinalReleaseComObject(xlCells) '退去手続きしたのは最新の1階5号室のみ 家主は1階10号室は借りっぱなしのままなので、いつまでもその部屋を 使っているものだと思って賃貸業を終わらせられません。 そんなイメージです。 http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm >3.ループ処理等で複数回使用した場合 > > 下記のように都度解放処理をする > For i = 1 To 255 > xlRange = xlSheet.Range(R1ToA1(1, i, 1, i)) > xlRange.Value = i > MRComObject(xlRange) > Next i
補足
リンクの件、申し訳ありません。 NO3でも記入したのですが、FinalReleaseComObjectの場合も必要あるのでしょうか?
- MARU4812
- ベストアンサー率43% (196/452)
ぱっと見て思ったのは、 xlCells(1, 5) のセルオブジェクトは解放してるけど、 xlCells(1, 10)は解放してないね。
補足
ご回答ありがとうございます。 NO2にも書かせて頂きましたがFinalReleaseComObjectでも必要なのでしょうか?
お礼
ご回答ありがとうごじざいます。 参考に色々と試してみたいと思います。