不一致的运行时错误'1004' - 删除范围类的方法失败



我在excel中编写了一些VBA来迭代相对较大的数据集,以便执行一些基本的格式化和整理。该代码以前有效,当我使用断点并单步执行它时仍然有效。但是,当我不逐步执行它而只是让代码自行运行时,电子表格将变得无响应。一旦我按了几次 esc 键,我就会收到运行时 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 

工作表变得无响应,只有当我按 esc 几次时,才会显示运行时错误。

无响应并不意味着 Excel 崩溃了。逐个删除行非常缓慢。

您可以使用

application.statusbar=cstr(iRow)
DoEvents

以查看您的进度并保持 Excel 响应。

如果它会变慢,我建议您在要删除的行中设置一些值,按该值排序,然后将它们一起删除。

最新更新