タイトル : Re^10: Subroutineの引数が原因でExcelが開放できなくなります。 投稿日 : 2009/09/04(Fri) 21:13 投稿者 : camputer
るしぇ 様 どうもありがとうございました! 教えていただいた >解放処理が正しく行なわれていなくとも、たまたまプロセスが消えてくれることはあると〜 を考慮した上で再度,コードを一か所ずつ消しながら怪しい個所をスクリーニングして みましたところ,怪しい個所がExcel関連のオブジェクトで2か所見つかりました! 私が今までずっと勉強していたような数値計算言語では,どんなに長いコードであっても バグ取りの際にある引数を消して症状が改善した場合は,間違いなくその引数か それの上流にある式が100%原因なので,それが身体にしみついていたようです...orz 今コーディングしている.NETでも,一度でも解放される現象が生じた場合,その流れまでに バグは無いと思いこんでおりました.今回はその原因であるはずのものが「Integer」だったので 一人で悩みましたが... あともしかするとExcel関連のオブジェクト以外が原因なのではないか?と思うような 症状が共通してありました.DataGridViewなのですが, Sub Excel練習 ・・・ Call DataGridView_Rows_Add(String1 As String, String2 As String, _ String3 As String, String4 As String, _ Integer1 As Integer, Integer2 As Integer) ・・・ End Sub のようなExcelオブジェクトを含まないサブルーチンの中のオブジェクト解放はほとんど 気にしておりませんでしたが,このCall文をコメントアウトするとExcel.Exeが必ず消える, といった現象がありました.スペックが低いPCで動作させた時の現象でしたが, もしかすると(VB素人の考えでございます^^;), もともとExcelがきちんと解放されていないがたまたまうまく消えやすいようなコードで, 更に他の解放できていないオブジェクトが多く生まれるとExcel関連の参照の解放に 影響が出るのかな???と思うのですが... 一番初めに質問させていただいた >subroutine1(String1, String2, Shape1, String3, Integer1, Integer2) > '↑ここの行が無ければ開放されます。。 >subroutine1(String1, String2, Shape1, String3, Integer1) >だと開放できるので、〜 についても,Integer2はそのsubroutine1の中で呼び出すDataGridViewの行番号でございます. 今回は色々と勉強することができました.見つけた怪しい個所については,今MSDNで 調べておりますが,解決策が見つかりません... 質問内容が全然違うものになってしまうのと,十分すぎるくらいのアドバイスをいただけましたので 今後の閲覧者の方々にわかりやすいよう新しいスレッドで質問させていただきます. この度は本当にどうもありがとうございました! VB界の有名な方々に閲覧・アドバイスしていただけて非常に光栄です. (素人質問で僭越でございます..)今後もどうぞよろしくお願いいたします. |