【发布时间】:2018-04-11 18:35:27
【问题描述】:
我已经在 excel 中编写了一些 VBA 来迭代一组相对较大的数据,以便执行一些基本的格式化和整理。该代码以前有效,并且当我使用断点并单步执行时仍然有效。但是,当我不单步执行它并让代码自行运行时,电子表格会变得无响应。一旦我按了几次转义键,我就会收到运行时 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
工作表变得无响应,只有当我按几次退出时才会显示运行时错误。
【问题讨论】:
-
错误时
iRow的值是多少。Cells(0, 4).EntireRow.Delete将抛出 1004。 -
5511 这是 IF 语句为真的第一行。总共有c122k行