2013-07-30 5 views
2

У меня проблема с моим макросом. Он удаляет строку, удовлетворяющую определенным критериям. Но когда несколько последовательных строк заполняют эти критерии, возникает ошибка. Когда строка удаляется, остальные строки сдвигаются вверх, поэтому если строка (2: 2) и строка (3: 3) заполняют критерии, тогда строка (2: 2) удаляется, а строка (3: 3) сдвигается вверх , поэтому он становится строкой (2: 2), а цикл For переходит в другую строку (третью). В результате строка, которая раньше была строкой (3: 3), а теперь - строка (2: 2), опущена и не удалена.
Чтобы справиться с этой темой, я думаю, что достаточно перевернуть цикл For, чтобы она не переходила снизу, а снизу вверх. Te resulat будет двойной проверкой некоторых строк, но никакие строки не будут опущены.
Оценка: Я не знаю, как создать цикл For. Я попытался изменить «For x = startrow To endrow» на «For x = endrow To startrow», но это не помогло.
Вот код:Как отменить цикл for

Sub Repurchase_upload() 

Dim Worksheet As Worksheets 
startrow = Worksheets("GUTS").Cells(10, 1) 
endrow = Worksheets("GUTS").Cells(11, 1) 

For x = startrow To endrow 'I have tried to change this line into: 'For x = endrow To startrow', but it didn' help 
      If Cells(x, "A").Value <> "AA" And Cells(x, "A").Value <> "AB" And Cells(x, "A").Value <> "AC" And Cells(x, "A").Value <> "AD" And Cells(x, "A").Value <> "AE" And  Cells(x, "A").Value <> "AH" And Cells(x, "A").Value <> "AI" And Cells(x, "A").Value <> "AF" And Cells(x, "A").Value <> "AG" Then 
      Cells(x, "A").EntireRow.Delete 

      End If 



    Next 
End Sub 

Спасибо всем вам много заранее,
с наилучшими пожеланиями,
Артур Рутковский

ответ

10

Если вы перекручивание и удаление строк, вам нужно начать с снизу и вверх:

For x = endrow To startrow step -1 

Затем удаление строк не приведет к нарушению цикла.

+0

Спасибо большое за помощь! Это оно. :) –

+0

Рад помочь, Артур. – dendarii

0

Другой вариант - положить x = x-1 после каждого удаления. Но лучше работать снизу вверх.

0

Loop вперед:

For i = 1 To 10 
    //Do something 
Next i 

Loop назад (используйте Step -1 в конце для цикла):

For i = 10 To 1 Step -1 
    //Do something 
Next i 
Смежные вопросы