タイトル : Re^6: Subroutineの引数が原因でExcelが開放できなくなります。 投稿日 : 2009/09/03(Thu) 11:34 投稿者 : るしぇ
関係ない話が混ざってて良く分かりません。 ReleaseComObject しなければいけないのは参照カウンタを増加させることで参照 されていると判断する、外部の COM オブジェクト。つまり今回の場合 Excel オブジェクトのみです。Integer や String は VB 内部の管理下にあり、 そもそも対象外です。 サブルーチンだからというのも基本的には関係ありません。引数の型指定の注意を 受けたのは暗黙の型変換をさせないためで、その中でも対象は Shape1 のみです。 型指定した時点でサブルーチンは関係ないと思っていいでしょう。 > 使い終わる度に、MRComObject(myShape) : myShape = Nothing としております。 > 他の宣言文 > ・・・ > 等についても、同様にMRComObjectで開放しているつもりですが、 これに抜けがあると考えるのが通常です。 で、サブルーチンを変更したら解放できたとのことですが、たまたま解放できる ことがあります。サブルーチンから離れた方がいいでしょう。 Integer や String は直接の原因ではありません。そこを変更するときに、他の コードも変更していませんか?もしくは処理条件が変わり、実行される処理が 変わっていませんか?該当の Integer や String へ値を入れる時に Excel オブジェクトを使っていませんか?その解放処理に抜けがありませんか? http://hanatyan.sakura.ne.jp/dotnet/Excelflm.htm 本サイトに纏められている通り、同じ変数を使用しても参照しているオブジェクト毎に 毎回解放する必要があり、省略形や暗黙の型変換でコードに現れていない Excel オブジェクトが裏で使用される場合があります。 そういったことも含めた、Excel オブジェクトの解放漏れをチェックしてください。 |