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

タイトル Cells.FindNextのループ中の解放
投稿日: 2009/09/16(Wed) 11:49
投稿者camputer

 こんにちは、質問させていただきます。どうぞよろしくお願いいたします。
 プログラム歴役10年+VB歴1年弱で、開発環境はXP+VB2008+Excel2003になります。

 エクセルのセルを検索しております。VBAでは解放の必要がないので出来ておりましたが、
もし.NETで
        Do  
                    Dim myRng As Excel.Range = xlCells.FindNext(myRng)

          MRComObject(myRng)
        Loop
のような事をやってしまうと、次のFindNext(myRng)でmyRngが使えなくなると思います。
そこで下のように一度myFindNextに入れておいて
myRngと交互に解放しようと考えたのですが、

                Dim xlCells As Excel.Range = xlSheet.Cells
                Dim myRng As Excel.Range = xlCells.Find("文字列")

                If Not MyRng Is Nothing Then
                    Dim 最初セル As String = myRng.Address
          Do  
                        Dim myFindNext As Excel.Range = xlCells.FindNext(myRng)
                        MRComObject(myRng)
                        myRng = myFindNext
                        MRComObject(myFindNext) '←これを入れると、
                         'myFindNextとmyRngの両方が
                         '使えなくなります。。。
                        MsgBox(myRng.Value)

            If myRng.Address = 最初セル Then
                          MRComObject(myRng) : myRng = Nothing
                        End If
                    Loop Until myRng Is Nothing
                End If
                MRComObject(myRng)
                MRComObject(xlCells)

 MRComObject(myFindNext)とすると、それ以降myFindNextとmyRngの両方が
使えなくなってしまいます。。(エラー「基になる RCW から分割された
COM オブジェクトを使うことはできません。」となります。)
 検索でFindNextを解放しているようなコードを探しましたが、以外に出てこず、
他のやり方が思いつきませんでした。。。
何かアドバイスかヒントをいただけないでしょうか。どうぞよろしくお願いいたします。


 あと、4行目の
  Dim 最初セル As String = myRng.Address 
ですが、エクセルのオブジェクトブラウザからRangeクラスAddressメンバの型を調べると、
本来は
  Dim 最初セル As Excel.XlReferenceStyle = myRng.Address
になるはずだと思うのですが、そうやると
エラー「String "$A$2" から型 'Integer' への変換は無効です。」となります。
そこでAs Stringのままにしている次第でございますが、上級者の方々の経験上、
このような事で何か問題があると考えていらっしゃるかどうかご意見をいただけないでしょうか。

 何かヒントをいただくことができればと思います。
どうぞよろしくお願いいたします。

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

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