タイトル : 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のままにしている次第でございますが、上級者の方々の経験上、 このような事で何か問題があると考えていらっしゃるかどうかご意見をいただけないでしょうか。 何かヒントをいただくことができればと思います。 どうぞよろしくお願いいたします。 |