Добавить строку с условием

#excel #vba

Вопрос:

Я пытаюсь создать подраздел VBA для добавления строк из «дочерней» книги в «мастер-файл» excel, только если строки содержат «несоответствие» в 4-х ячейках (идея представлена здесь: рисунок) Дочерний элемент рабочей книги-wkUP, а главный-wkDW, и пока мой цикл не работает, он добавляет неправильные строки…

Я предполагаю, что моя проблема в i и длине таблицы ?

 Dim i, iLastRow As Integer  
 Dim oLastRow As ListRow Dim srcRow As Range iLastRow = wkUP.Sheets("DATA").ListObjects("TAB1").ListRows.Count For i = 1 To iLastRow  If wkUP.Sheets("DATA").Cells(i, 4).Value = "nonconformity" Then  Set srcRow = wkUP.Sheets("DATA").ListObjects("TAB1").ListRows(i).Range  Set oLastRow = wkDW.Worksheets("NC").ListObjects("tbl_NC").ListRows.Add  srcRow.Copy  oLastRow.Range.Cells(9).PasteSpecial Paste:=xlPasteValues  End If Next  

Конец, Если

Если кто-то увидит, где код неправильный, я был бы очень признателен, я вроде как потерялся.. :'(

Ответ №1:

Вы используете i в двух разных контекстах:

  • По отношению к листу: .Cells(i, 4)
  • По отношению к таблице: .ListRows(i)

Вам нужно быть последовательным; вот один подход, который используется i только в отношении таблицы.

 Dim tbl As ListObject Set tbl = wkUP.Sheets("DATA").ListObjects("TAB1")  Dim lastRow As Long, i As Long lastRow = tbl.ListRows.Count  For i = 1 To lastRow  If tbl.ListColumns("Answer").DataBodyRange.Cells(i).Value = "nonconformity" Then  Set srcRow = tbl.ListRows(i).Range  ...  End If Next  

Комментарии:

1. Ах да ! Мне нужно сменить wkUP. Листы(«ДАННЫЕ»). Ячейки(i, 4).Значение, чтобы i работал внутри таблицы, а не на всем листе.

2. Черт, пока я выяснял твою точку зрения, ты все исправил ! Большое вам спасибо !

3. Другой вариант-использовать AutoFilter вместо зацикливания строку за строкой.