2016-02-20 2 views
1

Я хочу удалить указанное количество строк после найденного значения в столбце. Я нахожу значение поиска в A3, тогда я хочу удалить строки из 4-й строки в указанное количество строк, скажем, от 4-й строки до 11-й строки. В моем коде удаляются альтернативные строки. Если я укажу ~ Rows ("cnt1: cnt2"), это даст ошибку. Нужно руководство для исправления ошибки в моем коде. Изображения до и после запуска кода приведены ниже. Он должен удалить последовательные строки, содержащие AA, BB, CC, DD .....Удалить указанные последовательные строки после найденного значения

image before code runimage after code run

код следуют мне дается ниже.

Sub Asearch() 
Dim found As Range 
Dim FR As Long 
Dim cnt1 As Long 
Dim cnt2 As Long 
    Set found = Sheets("Sheet1").Columns("A").Find(what:="Swati", LookIn:=xlValues, lookat:=xlWhole) 
    If found Is Nothing Then 
     MsgBox "Not found" 
     Else 
     MsgBox "Found on row " & found.Row 
     FR = found.Row 
     cnt1 = FR + 1 
     Debug.Print cnt1 
     cnt2 = 11 
     Do While cnt1 <= cnt2 
      Rows(cnt1).EntireRow.Delete 
      cnt1 = cnt1 + 1 
      Debug.Print cnt1 
     Loop 
    End If 
End Sub 

РЕДАКТИРОВАТЬ публикации на основе руководства @micstr. Проблема решена. Обновленный код приведен ниже.

Sub Asearch2() 
Dim found As Range 
Dim FR As Long 
Dim cnt1 As Long 
Dim cnt2 As Long 
    Set found = Sheets("Sheet1").Columns("A").Find(what:="Swati", LookIn:=xlValues, lookat:=xlWhole) 
    If found Is Nothing Then 
     MsgBox "Not found" 
     Else 
     MsgBox "Found on row " & found.Row 
     FR = found.Row 
     cnt1 = FR + 1 
     Debug.Print cnt1 
     cnt2 = 11 
     Do While cnt2 >= cnt1 
      Rows(cnt2).EntireRow.Delete 
      cnt2 = cnt2 - 1 
      Debug.Print cnt2 
     Loop 
    End If 
End Sub 

ответ

1

У вас есть ошибка в вашей петле, поскольку вы продолжаете толкать счетчик вперед. Когда вы удаляете всю строку, индекс перемещается вверх. Так

1 aa 
2 bb 
3 cc 

Как удалить аа бб перемещается до 1 место, так что теперь добавив к нему один, чтобы противостоять cntl теперь смотрит на позицию 2. А вы удалите куб.см оставляя бб. Что переместилось в одно место.

1 bb 
2 cc 

Чтобы исправить это, возможно, вы хотите скорее отметить все строки сразу и удалить их как один блок. Или оставайтесь с Delete Allire Row и исправьте, как вы перемещаете свои счетчики. (Думая об этом, вы увидите, что cnt2 меняется, то есть перемещается вверх cnt2 = cnt2 - 1 при удалении строк).

Или другой подход, который может быть легче отладить, - это начать снизу и работать вверх не вниз.

Сообщите мне, если вам нужна дополнительная помощь.

+0

Я попытался удалить ряд строк, попробовав код ~ Rows ("cnt1: cnt2"). EntireRow.Delete ~, но он дает ошибку, кажется, не является правильным синтаксисом. Пожалуйста, предложите модификацию кода для этой цели. Мой уровень в VBA является базовым. пожалуйста помоги. – skkakkar

+1

Спасибо за ценное руководство. Проблема решена, и я загрузил отредактированный код. – skkakkar

+0

Отлично - рад, что вы его взломали. Иногда отладка может быть ад! – micstr

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