我在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 响应。
如果它会变慢,我建议您在要删除的行中设置一些值,按该值排序,然后将它们一起删除。