2017-06-20 186 views
0

下面我有一些代碼:Excel的VBA - Range.Find錯誤1004

Sub Priority() 

ActiveSheet.Name = "Raw Data" 

Dim ws As Worksheet 
Set ws = Sheets("Raw Data") 

Dim ws2 As Worksheet 
Set ws2 = ThisWorkbook.Sheets.Add(After:= _ 
     ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) 
ws2.Name = "Sev 4+" 

Dim copyRange As Range 
Dim firstAddress As String 

Row = 2 
Dim i As Integer 
For i = 1 To 1500 


    Set copyRange = ws.Range(Cells(i, 2), Cells(i, 2)).Find("feas", , , xlPart) 'The error pulls up at this line 

     If Not copyRange Is Nothing Then 

      Copied = ws.Range(Cells(i, 1), Cells(i, 17)).Value 
      ws2.Activate 
      ws2.Range(Cells(Row, 1), Cells(Row, 17)).Value = Copied 

      Row = Row + 1 

      ws.Activate 

     End If 

    Next i 

End Sub 

它在理論上應該考慮細胞中的B欄從1-1500和檢查單元包含在裏面「FEAS」。如果確實如此,它會將該行復制並粘貼到不同的工作表中。我知道IF語句是正確的,因爲如果我用其他條件替換「IF」行(未找到),它就可以工作。

任何想法?

+1

'ws.cells''ws2.cells'也許。是'ws.Range(Cells(i,2),Cells(i,2))。'不僅僅是'ws.range(cells(I,2))'這會搜索一個單元嗎? –

+2

一次,你在每次循環迭代開始時都要設置'Row = 2'。我想你會希望這發生在循環之外...... – Noceo

+0

什麼是錯誤? – Quint

回答

0

問題是因爲行:

Set copyRange = ws.Range(Cells(i, 2), Cells(i, 2)).Find("feas", , , xlPart) 

應該已經

Set copyRange = ws.Cells(i, 2).Find("feas", , , xlPart) 

另一個問題是,我需要的「如果不是」語句之後激活工作表「WS」。