2015-12-02 3 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

Спасибо большое, ребята, оба отлично работали. Очень признателен. –

Смежные вопросы