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

タイトル 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

 取り急ぎ御礼だけになってしまいますが、自分で解決してまたご報告させていただきます。
どうもありがとうございました!

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

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