タイトル : レイトバインドするとExcelのFindNextオブジェクトが開放できなくなります 投稿日 : 2010/07/14(Wed) 10:38 投稿者 : camputer
こんにちは、いつも勉強させていただいております、camputerと申します。 どうぞよろしくお願いいたします。 VB歴2年弱、プログラム歴10年程度 環境:VB2008+XP+Excel2002でございます。 Excelファイル操作用のコードをレイトバインドしてみたのですが、一箇所だけ オブジェクト解放ができなくなってしまいました。(他の2000行程度につきましては うまく解放できたのですが。。)もし怪しそうな箇所などございましたら、 是非ともアドバイスいただきたくお願いいたします。 xlCells = xlSheet.Cells 'Dim myRng As Excel.Range = xlCells.Find(OldStr)←レイトバインド前 Dim myRng As Object = xlCells.Find(OldStr) If Not myRng Is Nothing Then Dim 最初セル As String = myRng.Address Do 'Dim myFindNext As Excel.Range = xlCells.FindNext(myRng)←レイトバインド前 Dim myFindNext As Object = xlCells.FindNext(myRng) '★ MRComObject(myRng)'★ myRng = myFindNext'★ If myRng Is Nothing Then Exit Do Loop Until myRng.Address = 最初セル MRComObject(myRng) End If MRComObject(xlCells) '★マークをつけた3行を消すと綺麗に解放されます。 以前もオブジェクト解放について沢山のアドバイスをいただけたので、上のコードも レイトバインド前は綺麗に解放できておりました。 もしかすると、「Excel.Range」→「Object」としたことで型がはっきりせず 解放しにくくなる、という事でもあるのでございましょうか??? 私の考えといたしましては、 1回目のmyRngに入ったオブジェクト →Loop1回目でMRComObject(myRng) 1回目以降のmyFindNextに入ったオブジェクト →myRng = myFindNextでmyRngに入れておいて、次のLoopでMRComObject(myRng) 最後のmyFindNextに入ったオブジェクト → 〃 〃 Loop直後でMRComObject(myRng) ですべて解放できるのでは(?)などと思うのでございますが。。。 是非ともアドバイスいただきたくどうぞよろしくお願いいたします。 |