ここから本文です

VBAのFindNextを使いたいのですが、オブジェクト関数で エラー91が出て困っていま...

tel********さん

2010/10/2517:26:15

VBAのFindNextを使いたいのですが、オブジェクト関数で
エラー91が出て困っています。知恵をお貸し願いたく。

VBAでFindNext関数を使いたいのですが、オブジェクト関数で
エラー91”オブジェクト変数または、Withブロック変数が設定されていません”が出ます。

プログラムの概要は、別のファイル2を開いて、そのファイル2のシート1内に目標が
あれば処理を行う。
FindNextで複数検索を行うものです。

以下コード
Private Sub()

Workbooks.Open Filename:="ファイル2"

Dim objFind As Object
Dim strAddress As String

Workbooks.Open Filename:="ファイル2"
workbooks("ファイル2").Activate

Set objFind = Worksheets("シート1").Cells.Find("目標")
If Not objFind Is Nothing Then
strAddress = objFind.Address
Do While Not objFind Is Nothing
’処理
Set objFind = Cells.FindNext(objFind)
If strAddress = objFind.Address Then ←ここでエラー91が出ます
Exit Do
End If
Loop
Else
MsgBox "見つかりませんでした"
End If

End Sub

何が問題なのか、分かりません。
どなたか、教えて頂けますと、喜びます。
よろしくお願いします。

閲覧数:
4,234
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

fre********さん

編集あり2010/10/2518:13:43

こんばんは

考えられる原因は2点あります。
①FindNextメソッドは、Findメソッドと同じセル範囲を指定すること

Set objFind = Worksheets("シート1").Cells.Find("目標")

Set objFind = Cells.FindNext(objFind)
⇒Set objFind = Worksheets("シート1").Cells.FindNext(objFind)

※但し、アクティブシートが、シート1の場合は問題ありません。
___同じ検索範囲であることを明示した方が分かりやすいと思います。

②FindメソッドもFindNextメソッドも、検索合致セルが見つからない場合
___Nothingが戻り値に設定されます。
___そのため、FindNextメソッド実行後、objFind.Addressと書くと
___objFindがNothingの時、エラーになります。

従って、DoLoop条件を前条件でなく後条件に設定する事で回避します。
変更後のみ記述

(略)
If Not objFind Is Nothing Then
strAddress = objFind.Address
Do
'' 処理をここに書く

'' 同条件で次を検索
Set objFind = Worksheets("シート1").Cells.FindNext(objFind)
'' 後条件(検索合致セルが存在し、且つ最初のアドレスと異なる間、繰り返す)
Loop While (Not objFind Is Nothing) And objFind.Address <> strAddress
Else
MsgBox "見つかりませんでした"
End If

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる