2017-03-02 11 views
1

Excel VBA関数がかなりの時間稼働しています。「What」が見つからないときにExcelのcatchエラーが発生する

Dim rowNum as Integer 
for i = 1 to 20 
    rowNum = Columns(SiteNumCol).Find(What:=i, LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False).row 
    <other stuff> 
Next i 

エラーが返されます。しかし、私はiは、このコードに存在しない場合にことがわかりました。

rowNum = Columns(SiteNumCol).Find(What:=i, LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False).row 
    If Not rowNum = 0 Then 
     <other stuff> 
    End If 
Next i 

それはまだrownum =ラインで実行エラーが発生したしかし:私はチェックを含めるようにコードをリファクタリングしようとしました。私は何の行番号を呼んでいるとして、それがかもしれないと思ったので、このテストを試してみました:

test = Columns(NumCol).Find(What:=i, LookIn:=xlValues, _ 
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False) 
If Not test Is Nothing Then 
    rowNum = Columns(NumCol).Find(What:=i, LookIn:=xlValues, _ 
     LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).row 

またエラー424「必要なオブジェクト」とIf文で、今のエラーアウト。私はこれは、 'テスト'が現在最初の繰り返しでエラーとして2倍になっているためだと思います。テストを= "0"に変更すると、見つからないものが見つかるまで反復され、その後、エラーが発生します。なぜなら、正常な「91」オブジェクト変数が設定されていないためです。

.findエラー何が見つからないとき?

答えて

2

あなたはかなり近く、ちょうど私が考えるセットを欠いていた。

Dim r As Range 
Dim rowNum As Long 
For i = 1 To 20 
    Set r = Columns(SiteNumCol).Find(What:=i, LookIn:=xlValues, _ 
       LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False) 
    If Not r Is Nothing Then rowNum = r.Row 
    <other stuff> 
Next i 
+0

驚くばかり!私が投げたものは、同じコードを欠落した '.row'と再利用していたため、範囲オブジェクトにしていました。私はあなたの答えを見てすぐにペニーは落ちた! – fileinster

関連する問題