2017-06-20 172 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”。