2016-08-08 69 views
1

Ich schrieb diese schnelle For-Schleife als Teil meines Makros, um Zellen in utwbk zu finden, basierend auf einer Liste von Werten in dewbk. Die Schleife scheint für ein paar Zellen in Ordnung zu sein und stürzt dann ab. Das Problem ist, es stürzt jedes Mal für verschiedene Werte ab, aber die Werte existieren in utwbk. Hier ist mein Code:vba range.find Methode stoppt auf zufällige Zellen

Dim utpath As String 
Dim utwbk As Workbook 
Dim ogfund As String 
Dim ogcell As Range 
Dim newfund As String 
Dim newcell As Range 
Dim t As Long 


For t = 2 To tempfundlastrow 
If dewbk.Sheets("Macro").Cells(t, 1).Value <> "" Then 
    Set ogcell = dewbk.Sheets("Macro").Cells(t, 1) 
    ogfund = Trim(ogcell.Value) 

    With utwbk.Sheets("Report").Range(Cells(1, 1), Range("AAA1").SpecialCells(xlCellTypeLastCell)) 
    Set newcell = .Find(ogfund, LookIn:=xlValues, lookat:=xlWhole) 
    End With 

    newfund = newcell.Value 

    newcell.Offset(2, 0).Value = ogcell.Offset(0, 8).Value 
    newcell.Offset(3, 0).Value = ogcell.Offset(0, 9).Value 
    newcell.Offset(4, 0).Value = ogcell.Offset(0, 11).Value 
    newcell.Offset(6, 0).Value = ogcell.Offset(0, 10).Value 
Else 
    'nothing 
End If 
Next t 

Der Code stürzt mit Laufzeitfehler 91: ‚Objektvariable mit Blockvariable nicht gesetzt‘ auf dieser Linie:

newfund = newcell.Value 

In der vorherige Zeile, wo ich definiere newcell, ogfund hat einen Wert und ich kann diesen Wert in utwbk so wirklich nicht sicher finden, was los ist. Ich gehe davon aus, dass meine Syntax für die .Find falsch ist, aber ich weiß nicht, wie ich das beheben soll. Wie immer wird jede Hilfe sehr geschätzt!

+1

Vielleicht tat es nicht finde 'ogfund'. Sie müssen testen, ob 'newcell nichts ist'. – Brian

Antwort

3

Nach der Linie

Set newcell = .Find(ogfund, LookIn:=xlValues, lookat:=xlWhole) 

Typ dieser

If newcell Is Nothing Then 
    MsgBox "Not found" 
    Exit Sub 
End If 

Wenn Sie sehen das Meldungsfeld, das bedeutet .Find nicht den Suchtext finden konnte, und da sie nicht finden konnten, die newcell.Value werden brechen Sie den Code als newcell ist Nothing

BTW, wenn Sie nach einem Wort suchen BLAH an d in Ihrer Zelle haben Sie BLAH mit führenden und abschließenden Leerzeichen, dann wird Ihr .Find das Wort nicht finden, weil Sie lookat:=xlWhole verwenden. Vielleicht möchten Sie lookat:=xlPart

+2

Wenn nichts ist? –

+0

Vielen Dank Tim! Ich denke, ich sollte jetzt den Sack drücken: D –

1

Es ist ein häufiger Fehler. In

utwbk.Sheets("Report").Range(Cells(1, 1), Range("AAA1").SpecialCells(xlCellTypeLastCell)) 

Cells(1, 1) und Range("AAA1") beziehen sich auf Bereiche in der aktuell aktiven Blatt

Was möchten Sie wahrscheinlich mehr wie

With utwbk.Sheets("Report") 
    With .Range(.Cells(1, 1), .Range("AAA1").SpecialCells(xlCellTypeLastCell)) 
     Set newcell = .Find(ogfund, LookIn:=xlValues, lookat:=xlWhole) 
    End With 
End With 

ist oder nur

With utwbk.Sheets("Report").UsedRange 
    Set newcell = .Find(ogfund, LookIn:=xlValues, lookat:=xlWhole) 
End With