tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 オブジェクトの解放漏れをチェックしてください。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。