2011-07-15 21 views
1

私は、ワークシートに文字列を見つける関数を書いており、見つかったフレーズの位置に範囲変数を設定しています。私はエラーになっておくvbaの検索機能

Public Function ExceptionSearch(ByVal eString As String) As Boolean 

Dim pRange As Range 
Dim bDT As Boolean 
Dim bSVR As Boolean 
Dim bMB As Boolean 

Workbooks("test.xlsx").Worksheets("worksheet").Activate 

With Worksheets("worksheet").Range("a1:a5000") 

Set pRange = .Find(eString, LookIn:=xlValues) 

If pRange <> "" Then 
bDT = True 
Else 
bDT = False 
End If 

End With 


ExceptionSearch = bDT 

End Function 

「実行時エラー 『91』:オブジェクト変数またはWithブロック変数が設定されていません」

私は.findが値を返されているかどうかを確認しようとすると、私はエラーを取得します

これはおそらく単純な問題ですが、わかりません。

答えて

1

.Findがオブジェクトを返すので、値が見つからない場合はNothingに等しくなります。それを変更します。

If pRange Is Nothing Then 
    bDT = True 
Else 
    bDT = False 
End If 

それとも本当に、あなたは完全にif/elseブロックを排除し、ちょうどpRange Is NothingあなたはPRANGEが値を確認する前に存在を確認するためにチェックする必要があり、とにかくBoolean

+0

ありがとうございました。 – jz3

1

に戻ってくるので、ExceptionSearch=pRange Is Nothingを行うことができます空の文字列に対して

Set pRange = .Find(eString, LookIn:=xlValues) 

If Not pRange Is Nothing Then 
    ' string check here 
End If 
+0

jonscaはそれに私を打ち負かした。 :) –

+0

ちょっと別の簡単な質問、それは直接の関連性がないと思っていました。 cell.Rowの値を増やす方法はありますか? たとえば、usedCell.Row = usedCell.Row + 1と言うことができますか? この形式では動作していないようです。 – jz3

+0

@Joeいいえ、私はそうは思わない、そうでなければあなたはあなたのワークシート全体を投げ捨てることができます。変数に 'usedCell.Row'を代入し、変数をインクリメントしてそれを追跡することができます。 – jonsca