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

タイトル レイトバインドすると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)
ですべて解放できるのでは(?)などと思うのでございますが。。。

 是非ともアドバイスいただきたくどうぞよろしくお願いいたします。

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

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