タイトル : Re^4: Cells.FindNextのループ中の解放 投稿日 : 2009/09/16(Wed) 16:53 投稿者 : camputer
魔界の仮面弁士 様 どうもありがとうございます!! 本当にいつも沢山のアドバイスをいただき光栄でございます。 これだけのアドバイスをいただけたので、自分で解決できるはずです。 私が今まで誤解していたと思われる箇所が、今回ご説明いただけた >変数とオブジェクトインスタンスを分けて考えてください。 と >オブジェクト2は、次回のループ時に破棄されます。 の部分です。 変数(myRngとmyFindNext)をともに毎回MRComObjectする方法ばかり考えておりました。 どうもありがとうございます。 MRComObjectにつきましては、ずっとVBレスキュー花ちゃんで御提示いただいていた コードを使わせていただいておりますが、 (これも魔界の仮面弁士様がご作成くださったコードのようですね^^ 花ちゃん様のコメントを読ませていただいていて気付きました。 重ね重ねどうもありがとうございますm(_ _)m ) もし次のコード@のような書き方をするのであれば、ObjにはNothingを入れない方が 良いのかな(?)などと考えまして、ためしにSub MRComObject内の最後の 「objCom = Nothing」をコメントアウトしてみて、コードAのように書いております。 【コード@】 For Each Obj in Objs : : MRComObject(Obj) '←ここでObjにNothingを入れない方がよいのかな?と考えました。 Loop MRComObject(Objs) 【コードA】 For Each Obj in Objs : : MRComObject(Obj) '(Obj=Nothingを含まず) Loop MRComObject(Objs) : objs = Nothing 以下、http://hanatyan.sakura.ne.jp/dotnet/Excel01.htmからの引用です。 Public Shared Sub MRComObject(Of T As Class)(ByRef objCom As T, Optional ByVal force As Boolean = False) If objCom Is Nothing Then Return End If Try If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then If force Then System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom) Else Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom) Debug.WriteLine(count) End If End If Finally 'objCom = Nothing '←ここをコメントアウトして試しております。 間違っているかもしれませんが。。。 End Try End Sub 取り急ぎ御礼だけになってしまいますが、自分で解決してまたご報告させていただきます。 どうもありがとうございました! |