2016-02-07 4 views
0

У меня есть лист под названием Backlog, содержащий строки и столбцы данных. Мне нужен код, который будет искать строку за строкой во втором столбце для поиска # N/A. Когда он найдет # N/A, ему нужно проверить последний столбец, если он содержит C или нет. Если он содержит C, то вся строка должна быть добавлена ​​к листу с именем Logoff. Если последний столбец не содержит C, тогда вся строка должна быть добавлена ​​к листу с именем Denied. Строка должна быть удалена из первоначального листа отставания, как только перемещена в «Выход» или «Отклонено». Код, который у меня ниже, не работает. После первого For Statement он переходит к End Sub, но ошибок компиляции нет.Найти ячейки на одном листе и скопировать строки на другой лист

Private Sub CommandButton2_Click() 
    Dim IMBacklogSh As Worksheet 
    Set IMBacklogSh = ThisWorkbook.Worksheets("Backlog") 
    Dim logoffSh As Worksheet 
    Set logoffSh = ThisWorkbook.Worksheets("Claims Logged off") 
    Dim deniedsh As Worksheet 
    Set deniedsh = ThisWorkbook.Worksheets("Claims Denied") 

    IMBacklogSh.Select 
    Dim i As Long 
    For i = 3 To Cells(Rows.Count, 13).End(xlUp).Row 
     If Cells(i, 13).Value = "#N/A" Then 
      If Cells(i, 14).Value = "C" Then 
      IMBacklogSh.Rows(i).EntireRow.Copy Destination:=logoffSh.Range("A" & logoffsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) 
      Else 
      IMBacklogSh.Rows(i).EntireRow.Copy Destination:=deniedsh.Range("A" & deniedsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) 
      End If 
     End If 
    Next i 
End Sub 
+0

Связанный дубликат показывает вам, как найти ошибки в столбце. Копирование на другой рабочий лист - это просто. Вернитесь и отредактируйте свой вопрос, чтобы включить свои собственные усилия, если у вас возникли проблемы с выяснением того, как скопировать строку. – Jeeped

+1

Я добавил свой код. Я не могу понять, почему он не работает после инструкции For. Когда я отлаживаю его, он переходит к концу сразу после инструкции For i = 3 и, по-видимому, не оценивает ни одну из строк. –

ответ

3

Попробуйте If Cells(i, 13).Text = "#N/A" Then. #N/A - код ошибки, а не значение; однако может быть исследован Range.Text property, или IsError function может быть использован для проверки содержимого ячейки для любой ошибки.

If Cells(i, 13).Text = "#N/A" Then 
    'Alternate with IsError 
    'If IsError(Cells(i, 13)) Then 
     If Cells(i, 14).Value = "C" Then 
      IMBacklogSh.Rows(i).EntireRow.Copy _ 
       Destination:=logoffSh.Range("A" & logoffsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) 
     Else 
      IMBacklogSh.Rows(i).EntireRow.Copy _ 
       Destination:=deniedsh.Range("A" & deniedsh.Cells(Rows.Count, "A").End(xlUp).Row + 1) 
     End If 
    End If 

Однако индивидуальная проверка клеток не является необходимой и требует много времени. AutoFilter method может использоваться для выделения #N/A с C и #N/A с <>C.

Private Sub CommandButton2_Click() 
    Dim IMBacklogSh As Worksheet, logoffSh As Worksheet, deniedsh As Worksheet 

    Set IMBacklogSh = ThisWorkbook.Worksheets("Backlog") 
    Set logoffSh = ThisWorkbook.Worksheets("Claims Logged off") 
    Set deniedsh = ThisWorkbook.Worksheets("Claims Denied") 

    With IMBacklogSh 
     If .AutoFilterMode Then .AutoFilterMode = False 
     With .Cells(1, 1).CurrentRegion 
      .AutoFilter field:=13, Criteria1:="#N/A" 
      .AutoFilter field:=14, Criteria1:="C" 
      With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        .Copy Destination:= _ 
         logoffSh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
        'optionally delete the originals 
        .EntireRow.Delete 
       End If 
      End With 
      .AutoFilter field:=14, Criteria1:="<>C" 
      With .Resize(.Rows.Count - 1, Columns.Count).Offset(1, 0) 
       If CBool(Application.Subtotal(103, .Cells)) Then 
        .Copy Destination:= _ 
         deniedsh.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 
        'optionally delete the originals 
        .EntireRow.Delete 
       End If 
      End With 
     End With 
     If .AutoFilterMode Then .AutoFilterMode = False 
    End With 
End Sub 
+0

Спасибо Jeeped. Код AutoFilter работал отлично. –

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