Несогласованная ошибка времени выполнения '1004' - сбой метода удаления класса диапазона

Я написал немного VBA в Excel для перебора относительно большого набора данных, чтобы выполнить базовое форматирование и наведение порядка. Код раньше работал и все еще работает, когда я использую точку останова и перехожу через нее. Однако, когда я не перехожу через него и просто позволяю коду работать сам по себе, электронная таблица перестает отвечать. После того, как я несколько раз нажал escape, я получаю сообщение об ошибке времени выполнения 1004 (см. Заголовок), и соответствующая строка подсвечивается.

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

Любая помощь будет принята с благодарностью, потому что я в тупике. Вот код:

Private Sub CommandButton21_Click()

Dim index As Integer, lapsedSchemes As New Collection, lapseDates As New 
Collection
Dim iRow As Long
Dim iCol As Integer

Sheet1.Columns(5).NumberFormat = "dd-mmm-yy"                   
Sheet1.Columns(14).NumberFormat = "dd-mmm-yy"                   

iRow = 2

Do While Sheet3.Cells(iRow, 1).Value <> ""                      

    lapsedSchemes.Add Sheet3.Cells(iRow, 1).Value
    lapseDates.Add Sheet3.Cells(iRow, 2).Value
    iRow = iRow + 1

Loop

iRow = 2

Do While Cells(iRow, 7).Value <> ""                            

    index = 1

    If Cells(iRow, 9).Value = "" Then                           
        If Cells(iRow, 7).Value = Cells(iRow, 8).Value Then
           Cells(iRow, 9).Value = "Policy Holder"
        Else
           Cells(iRow, 9).Value = "Dependant"
        End If
    End If

    For Each scheme In lapsedSchemes                                                    

        If Cells(iRow, 4).Value = scheme And Cells(iRow, 5) = lapseDates(index) Then  
            Cells(iRow, 4).EntireRow.Delete                                            
            iRow = iRow - 1
            Exit For
        End If

        index = index + 1

    Next scheme

    iRow = iRow + 1

Loop

appendLegacyData (iRow)
Range("A1:AZ10000").Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("D1"), Order2:=xlAscending, Key3:=Range("E1"), Order3:=xlAscending, Header:=xlYes

End Sub

Оскорбительная строка:

Cells(iRow, 4).EntireRow.Delete 

Лист перестает отвечать, и только когда я несколько раз нажимаю escape, отображается ошибка времени выполнения.

каково значение iRow при ошибке. Cells(0, 4).EntireRow.Delete выбросит 1004.

cyboashu 11.04.2018 12:25

5511, которая является первой строкой, для которой верен оператор IF. Всего c122k строк

Braide 11.04.2018 12:44
1
2
1 262
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Отсутствие ответа не означает, что Excel вышел из строя. Удаление строк по одной происходит очень медленно.

Ты можешь использовать

application.statusbar=cstr(iRow)
DoEvents

чтобы следить за своими успехами и поддерживать отзывчивость Excel.

Если он будет работать слишком медленно, я рекомендую вам установить какое-то значение в удаляемых строках, отсортировать по этому значению, а затем удалить их все вместе.

Но раньше код работал нормально. Кроме того, несмотря на то, что всего имеется c122k строк, вероятно, только около 100 нуждаются в удалении. Я дал ему поработать около 10 минут, но он не ответил.

Braide 11.04.2018 12:45

Я попробую ваше предложение, но куда мне вставить ваш код?

Braide 11.04.2018 12:45

в основном цикле. строка состояния - это текст в нижнем левом углу. DoEvents полностью обновляет Excel.

ingwarus 11.04.2018 12:51

Да, вы правы, код выполняется, но он очень медленный !!! Он работает нормально, пока не попадет в первую строку, которую нужно удалить, а затем никогда не восстанавливается, просто работает медленно в остальное время. Я прислушиваюсь к вашему совету и просто помечаю каждую строку для удаления, а затем сортирую и удаляю их в конце. Спасибо, брат.

Braide 11.04.2018 13:06

возможно, есть какая-то ошибка при удалении строк / столбцов, но ее сложно изолировать. удачи.

ingwarus 11.04.2018 13:18

Другие вопросы по теме