Я пытаюсь очистить набор данных и заметил что-то странное с функцией vba. Entirerow.delete Следующий код, как и предполагалось, удалит всю строку, если она в формате strikethrough, но пропустят строки сразу после него, если они также находятся в этом формате. Кажется, что он берет строку, которая не находится в зачеркнутом формате, чтобы «сбросить» возможность удалять больше строк. Кто-нибудь знает, почему, или что я могу сделать, чтобы отладить это?«entirerow.delete» пропускает записи в For loop
For Each rng In rng1
'Check each character in the cell
For i = 1 To Len(rng.Value)
'If any letter is Strikethrough,delete entire column
If rng.Characters(i, 1).Font.Strikethrough = True Then
rng.Select 'just serves the purpose of observing which rows are being selected
rng.EntireRow.Delete
GoTo NextRng
End If
Next i
NextRng:
Next rng
Я должен сказать, что я нашел обходной путь, используя другой подход, но это очень медленно:
'Delete cells that have the strikethrough format - works but is super slow!
ws2.Range("B2").Activate
Do Until ActiveCell.Value = ""
If ActiveCell.Font.Strikethrough = True Then
ActiveCell.EntireRow.Delete
Else: ActiveCell.Offset(1, 0).Activate
End If
Loop
Если у кого есть альтернативный способ решения этого вопроса, который также быстро, я 'также очень благодарен за ваш вклад.
Loop назад, если вы удаляете строки. – Comintern
Вы никогда не должны удалять строки в таком цикле. Используйте обратный контур. Поиск stackoverflow. Я ответил на сообщение до –
см. Мой [сообщение] (http://stackoverflow.com/questions/19241905/vba-conditional-delete-loop-not-working). Вы также можете использовать объект диапазона для определения строк, которые вы хотите удалить. Это намного быстрее, чем удаление строк в цикле –