2015-12-02 101 views
1

我看不到我在哪里出错,任何帮助表示赞赏。 我试图剪切并粘贴其中有'解决'这个词的任何行到另一个电子表格,但是代码在循环开始时被阻塞在cl.activate上。错误1004选择范围级别的方法失败

Sub FindString() 
    Dim SearchString As String 
    Dim SearchRange As Range, cl As Range 
    Dim FirstFound As String 
    Dim sh As Worksheet 

    'Open first item to search and paste destination 
    Workbooks.Open "G:\BS\Josh Whitfield\Credit_Chasing\NEW PROCESS\Markerstudy.xlsx" 
    Workbooks.Open "G:\BS\Josh Whitfield\Credit_Chasing\NEW PROCESS\solved results.xlsx" 
    Workbooks("markerstudy").Activate 

    ' Set Search value 
    SearchString = "solved" 
    Application.FindFormat.Clear 
    ' loop through all sheets 
    For Each sh In ActiveWorkbook.Worksheets 
     ' Find first instance on sheet 
     Set cl = sh.Cells.Find(What:=SearchString, _ 
      After:=sh.Cells(1, 1), _ 
      LookIn:=xlValues, _ 
      LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, _ 
      MatchCase:=False, _ 
      SearchFormat:=False) 
     If Not cl Is Nothing Then 
      ' if found, remember location 
      FirstFound = cl.Address 
      ' format found cell 
      Do 
       cl.Activate 
       ActiveCell.EntireRow.Cut 
       Workbooks("solved results").Activate 
       Range("A1").Select 
       If ActiveCell <> "" Then 
        ActiveCell.Offset(1, 0).Select 
        ActiveCell.PasteSpecial xlPasteAll 
       Else 
        ActiveCell.PasteSpecial xlPasteAll 
       End If 

       ' find next instance 
       Set cl = sh.Cells.FindNext(After:=cl) 
       ' repeat until back where we started 
      Loop Until FirstFound = cl.Address 
     End If 
    Next 
End Sub 

回答

1

您需要激活表第一,用cl.Parent.Activate

Sub FindString() 
    Dim SearchString As String 
    Dim SearchRange As Range, cl As Range 
    Dim FirstFound As String 
    Dim sh As Worksheet 

    'Open first item to search and paste destination 
    Workbooks.Open "G:\BS\Josh Whitfield\Credit_Chasing\NEW PROCESS\Markerstudy.xlsx" 
    Workbooks.Open "G:\BS\Josh Whitfield\Credit_Chasing\NEW PROCESS\solved results.xlsx" 
    Workbooks("markerstudy").Activate 

    ' Set Search value 
    SearchString = "solved" 
    Application.FindFormat.Clear 
    ' loop through all sheets 
    For Each sh In ActiveWorkbook.Worksheets 
     ' Find first instance on sheet 
     Set cl = sh.Cells.Find(What:=SearchString, _ 
      After:=sh.Cells(1, 1), _ 
      LookIn:=xlValues, _ 
      LookAt:=xlPart, _ 
      SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, _ 
      MatchCase:=False, _ 
      SearchFormat:=False) 
     If Not cl Is Nothing Then 
      ' if found, remember location 
      FirstFound = cl.Address 
      ' format found cell 
      Do 
       cl.Parent.Activate 
       cl.Activate 
       ActiveCell.EntireRow.Cut 
       Workbooks("solved results").Activate 
       Range("A1").Select 
       If ActiveCell <> "" Then 
        ActiveCell.Offset(1, 0).Select 
        ActiveCell.PasteSpecial xlPasteAll 
       Else 
        ActiveCell.PasteSpecial xlPasteAll 
       End If 

       ' find next instance 
       Set cl = sh.Cells.FindNext(After:=cl) 
       ' repeat until back where we started 
      Loop Until FirstFound = cl.Address 
     End If 
    Next 
End Sub 
+0

或者只是使用'cl.EntireRow.Cut'和完全跳过激活。 (否则,你也需要先激活正确的工作簿) – Rory

+0

@Rory:的确,我只是停止了激活问题,并没有阅读下一行...... 但是,如果OP不需要,这是一个更好的命题使用它(我这样做“调试”很容易) – R3uK

+0

非常感谢你们,都工作得很好。非常感激。 –

相关问题