Почему этот код VBA зацикливается очень медленно? - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть цикл, который проходит ~ 15K строк, проверяет, существует ли значение в массиве, и удаляет строку, если нет.Я использовал этот цикл в течение нескольких месяцев без проблем.Теперь каждый цикл занимает около 2 секунд, и я понятия не имею, почему.Я выполнил обычные настройки «установить вычисления вручную» и «отключить обновление экрана» без каких-либо улучшений.

Извините, но данные конфиденциальны, поэтому я не могу дать вам, ребята, исходные файлы

        For lngCounter = lngLastrowresults To 3 Step -1
        On Error GoTo Handler
           If IsError(Application.Match(Range(Mid(strProjLoc, 2, 1) & CStr(lngCounter)), arrProjectID, False)) Then
             Range("B" & CStr(lngCounter)).EntireRow.Delete
             Debug.Print lngCounter
           End If
         Next lngCounter

Есть идеи?

Обновление 1: я закрылся из Excel, снова открыл и снова запустил цикл.Это начало бежать быстро, но становится медленнее.

Обновление 2: я изолировал цикл и выполнял F8 через линии.Строка, которая останавливается, является "Range (" B "& CStr (lngCounter)). FullRow.Delete".Кажется, что удаление строки занимает много времени.

1 Ответ

0 голосов
/ 11 сентября 2018

Итак, я нашел другой метод удаления строк, который НАМНОГО быстрее. Я использовал этот метод, описанный здесь, и он прекрасно работает. https://stackoverflow.com/a/19241990/10344640

Спасибо Siddharth Rout за публикацию этого сообщения!

...